My Android app has two Spinners (dropdown menus) working fine.
However, now I've added an OptionsMenu with:
- One submenu with options to open an AlertDialog textbox.
- One submenu with options to change language (locale).
If I click one option in the first submenu, the contents in both of my spinners get deleted, and then the textbox gets opened. When I click myself out of the textbox, the spinners are still cleared.
Similarly, if I click myself into changing language, both of the spinners get cleared, while the rest of the program gets updated to the new language. By restarting the app, all the contents are back.
If it matters, the spinners get their contents from an ArrayAdapter.
So I wonder, how can I update the spinners when they get cleared? I've tried "repopulating" the spinners with code in onCreate, onResume or onConfigurationChanged, but it didn't make any change.
I can find more code if you need, but at least here's some of it:
Spinner spinner1;
Spinner spinner2;
ArrayAdapter<CharSequence> adapter1;
ArrayAdapter<CharSequence> adapter2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
spinner1 = (Spinner) findViewById(R.id.spinner1);
adapter1 = ArrayAdapter.createFromResource(
this, R.array.some_array, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);
spinner1.setSelection(1);
// Same procedure for spinner2...
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Resources res = getResources();
SubMenu faqMenu = menu.addSubMenu(0, 100, 1, res.getString(R.string.FAQ)).setIcon(android.R.drawable.ic_menu_rotate);
faqMenu.add(1, 101, 0, R.string.someText);
SubMenu langMenu = menu.addSubMenu(0, 200, 2, res.getString(R.string.language)).setIcon(android.R.drawable.ic_menu_rotate);
langMenu.add(1, 201, 0, "Language1");
langMenu.add(1, 202, 0, "Language2");
langMenu.add(1, 203, 0, "Language3");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case 101:
AlertDialog.Builder textbox = new AlertDialog.Builder(main.this);
Resources res = getResources();
textbox.setMessage(res.getString(R.string.someText));
textbox.show();
this.setContentView(R.layout.main);
try{
spinner1.setAdapter(adapter1);
spinner2.setAdapter(adapter2);
spinner1.setSelection(1);
spinner2.setSelection(2);
} catch (Exception e){
e.printStackTrace();
}
break;
case 201:
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Here is text in Language1! But unfortunately you need to restart the app before the spinners start working again...sorry!", Toast.LENGTH_LONG).show();
this.setContentView(R.layout.main);
try{
spinner1.setAdapter(adapter1);
spinner2.setAdapter(adapter2);
spinner1.setSelection(1);
spinner2.setSelection(2);
} catch (Exception e){
e.printStackTrace();
}
break;
// Similar code for options 202, 203
}
return super.onOptionsItemSelected(item);
}
final Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
// Perform action on click
public void onClick(View v) {
// Make text box
AlertDialog.Builder textbox = new AlertDialog.Builder(MyActivity.this);
Resources res = getResources();
// Get the chosen values from the spinners
String spinner1choice = spinner1.getSelectedItem().toString();
String spinner2choice = spinner2.getSelectedItem().toString();
// Some code for showing the selected items.
}
}
So...anyone got any help on how to update/refresh the spinners?