Visualizzazione stampabile
-
enable/disable MenuItem
Sono sempre a chiedere aiuto, lo so :(
Vorrei cambiare la proprietà Enabled di una voce di menù alla selezione di un'altra.
In pratica se viene selezionata la stagione 2014-15 deve essere abilitata la sola stagione 2015-16 e viceversa
Questo funziona (determina da subito l'ultima scelta e adegua il menù):
codice:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem m14 = menu.findItem(R.id.menu_201415);
MenuItem m15 = menu.findItem(R.id.menu_201516);
TextView t2 = (TextView) this.findViewById(R.id.textView2);
switch (t2.getText().toString()) {
case ("Stagione 201415"):
m14.setEnabled(false);
m15.setEnabled(true);
break;
case ("Stagione 201516"):
m14.setEnabled(true);
m15.setEnabled(false);
break;
}
return true;
}
Invece questo (in "onOptionsItemSelected") non funziona:
codice:
if (id == R.id.menu_201415) {
TextView t2 = (TextView) this.findViewById(R.id.textView2);
t2.setText("Stagione 201415");
MenuItem m14 = menu.findItem(R.id.menu_201415);
MenuItem m15 = menu.findItem(R.id.menu_201516);
m14.setEnabled(false);
m15.setEnabled(true);
return true;
}
e viceversa true/false alla selezione dell'altro menù
l'errore è:
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference
ma il riferimento null di cui parla viene suggerito da Android Studio ... help :(
-
edit:
ci sono riuscito :)
usando "onPrepareOptionsMenu(Menu menu)"
mi resta un dubbio perchè leggo su un sito:
On Android 2.3.x and lower, the system calls onPrepareOptionsMenu() each time the user opens the options menu (presses the Menu button).
On Android 3.0 and higher, we need to call invalidateOptionsMenu() to request that the system call onPrepareOptionsMenu().
cosa significa? devo chiamare invalidateOptionsMenu() nel "onOptionsItemSelected"?
devo inserire:
codice:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
invalidateOptionsMenu();
}
dopo che è stato selezionato il menù?