在 onClickListener 的对话框上下文中输入什么?
What to enter in context of dialog in onClickListener?
我正在尝试通过观看 YouTube 视频来制作单位转换器。问题是他在他的主要 activity 中做所有这些,而我在片段中做所有这些。错误在 java class 片段 UnitConverterFragment.java
as
public class UnitConverterFragment extends Fragment {
TextView convertFromDropdownTextView, convertToDropdownTextView, conversionRateText;
EditText amountToConvert;
ArrayList<String> arrayList;
Dialog fromDialog;
DialogFragment toDialog;
Button convertButton;
String convertFromValue, convertToValue, conversionValue;
String[] unit = {}; //TODO
//end
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
return inflater.inflate(R.layout.fragment_unit_converter, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//start
convertFromDropdownTextView = view.findViewById(R.id.convert_from_dropdown_menu);
convertToDropdownTextView = view.findViewById(R.id.convert_to_dropdown_menu);
convertButton = view.findViewById(R.id.conversionButton);
conversionRateText = view.findViewById(R.id.conversionRateText);
amountToConvert = view.findViewById(R.id.amountToConvertValueEditText);
arrayList = new ArrayList<>();
for (String i : unit) {
arrayList.add(i);
}
convertFromDropdownTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fromDialog = new Dialog(UnitConverterFragment.this);
fromDialog.setContentView(R.layout.from_spinner);
fromDialog.getWindow().setLayout(650, 800);
fromDialog.show();
EditText editText = fromDialog.findViewById(R.id.edit_text);
ListView listView = fromDialog.findViewById(R.id.list_view);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(UnitConverterFragment.this, android.R.layout.simple_list_item_1, arrayList);
}
});
//end
}
}
MainActivity.java
是:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
//start
//end
private DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// start
// end
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
navigationView.setCheckedItem(R.id.nav_home);
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_home:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
break;
case R.id.nav_unit_converter:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new UnitConverterFragment()).commit();
break;
case R.id.nav_contact:
Toast.makeText(this, "Contacting...", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_share:
Toast.makeText(this, "Sharing...", Toast.LENGTH_SHORT).show();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
}
super.onBackPressed();
}
我得到的错误在 UnitConverterFragment.java
最后的 OnClickListener
中。它说它需要上下文。我对此很陌生,所以可能犯了一个大错误。我在看 this youtube video.
首先,您要传递当前上下文 this 这是 Dialog 中的 fragmentContext 本身,但您需要传递父上下文。您可以执行以下操作:
....
...
convertFromDropDownTextView.setOnClickListener(...){
...
fromDialog = new Dialog(requirActivity());
....
//And your ArrayAdapter should be like below:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, arrayList);
....
}
我正在尝试通过观看 YouTube 视频来制作单位转换器。问题是他在他的主要 activity 中做所有这些,而我在片段中做所有这些。错误在 java class 片段 UnitConverterFragment.java
as
public class UnitConverterFragment extends Fragment {
TextView convertFromDropdownTextView, convertToDropdownTextView, conversionRateText;
EditText amountToConvert;
ArrayList<String> arrayList;
Dialog fromDialog;
DialogFragment toDialog;
Button convertButton;
String convertFromValue, convertToValue, conversionValue;
String[] unit = {}; //TODO
//end
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
return inflater.inflate(R.layout.fragment_unit_converter, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//start
convertFromDropdownTextView = view.findViewById(R.id.convert_from_dropdown_menu);
convertToDropdownTextView = view.findViewById(R.id.convert_to_dropdown_menu);
convertButton = view.findViewById(R.id.conversionButton);
conversionRateText = view.findViewById(R.id.conversionRateText);
amountToConvert = view.findViewById(R.id.amountToConvertValueEditText);
arrayList = new ArrayList<>();
for (String i : unit) {
arrayList.add(i);
}
convertFromDropdownTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fromDialog = new Dialog(UnitConverterFragment.this);
fromDialog.setContentView(R.layout.from_spinner);
fromDialog.getWindow().setLayout(650, 800);
fromDialog.show();
EditText editText = fromDialog.findViewById(R.id.edit_text);
ListView listView = fromDialog.findViewById(R.id.list_view);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(UnitConverterFragment.this, android.R.layout.simple_list_item_1, arrayList);
}
});
//end
}
}
MainActivity.java
是:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
//start
//end
private DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// start
// end
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
navigationView.setCheckedItem(R.id.nav_home);
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_home:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
break;
case R.id.nav_unit_converter:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new UnitConverterFragment()).commit();
break;
case R.id.nav_contact:
Toast.makeText(this, "Contacting...", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_share:
Toast.makeText(this, "Sharing...", Toast.LENGTH_SHORT).show();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
}
super.onBackPressed();
}
我得到的错误在 UnitConverterFragment.java
最后的 OnClickListener
中。它说它需要上下文。我对此很陌生,所以可能犯了一个大错误。我在看 this youtube video.
首先,您要传递当前上下文 this 这是 Dialog 中的 fragmentContext 本身,但您需要传递父上下文。您可以执行以下操作:
....
...
convertFromDropDownTextView.setOnClickListener(...){
...
fromDialog = new Dialog(requirActivity());
....
//And your ArrayAdapter should be like below:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, arrayList);
....
}