J'ai parcouru les questions sur le dépassement de capacité de la pile et ne trouve pas la solution.
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.themenu, menu);
MenuItem item = menu.findItem(R.id.menu_settings);
MenuItem item2 = menu.findItem(R.id.menu_save);
item.setVisible(isdown);
item2.setVisible(isdown);
return true;
}
Cela rend visibles les éléments de mon menu (item1 et item2). le onclick fonctionne bien
public void inflateTextarea() {
if(isdown == true) {
isdown = false;
LinearLayout tl = (LinearLayout)findViewById(R.id.content);
tl.setVisibility(View.VISIBLE);
ScaleAnimation scale = new ScaleAnimation(1, 1, 0, 1);
scale.setFillAfter(true);
scale.setDuration(500);
tl.startAnimation(scale);
}
}
Ensuite, cela définit my isdown boolean sur false. Sur la pile, les utilisateurs disent que le onPrepareOptionsMenu devrait se déclencher à chaque fois que je clique mais ce n'est pas le cas.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_settings:
Log.v("Log:","edit_item pressed");
return true;
}
}
Mais j'ai plusieurs éléments de menu que je dois cacher et d'autres que je veux montrer. Comment puis-je m'y prendre?
Ce n'est pas suffisant pour changer la variable isDown
. Vous devez appeler la méthode setVisible()
chaque fois que vous souhaitez modifier la visibilité. Cette méthode fait plus que simplement définir une valeur booléenne, donc il ne suffit pas de changer une valeur booléenne.
Après avoir défini la valeur isDown
sur false, vous devez appeler invalidateOptionsMenu()
pour relancer le menu en appelant à nouveau onPrepareOptionsMenu()
.
Essayez ce code pour rendre les éléments de menu invisibles:
...
isdown = false;
invalidateOptionsMenu();
...
Essaye ça,
private Menu menu=null;
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater)
{
inflater.inflate(R.menu.note_menu, menu);
this.menu=menu;
super.onCreateOptionsMenu(menu,inflater);
menu.findItem(R.id.menuChartNoteEdit).setVisible(isdown);
menu.findItem(R.id.menuChartOpenNote).setVisible(isdown);
}
Lorsque vous voulez masquer le menu à n’importe quel endroit, après avoir exécuté onCreateOptionsMenu()
, Changez simplement la valeur de isdown
et répétez ce code,
menu.findItem(R.id.menu_settings).setVisible(isdown);
menu.findItem(R.id.menu_save).setVisible(isdown);
J'ai un menu avec deux éléments, d'abord: enregistrer l'élément, ensuite: éditer l'élément. Je voulais quand je suis entré pour éditer, au début, "enregistrer l'élément" avait été masqué, et lorsque je cliquais sur "éditer l'élément", "enregistrer l'élément" était affiché.
Alors:
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
isHidden()
isVisible()
Région publique:
MenuItem saveItem;
onCreateOptionsMenu:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_detail_products, menu);
saveItem = (MenuItem) menu.findItem(R.id.action_detail_product_save);
saveItem.setVisible(isHidden());
}
Où je veux:
saveItem.setVisible(isVisible());
Finalement ça marche comme je voulais.
Essayez ceci dans votre FragmentActivity
public boolean onPreparePanel(int featureId, View view, Menu menu) {
if(isLeftMenuOpened()) return false;
return super.onPreparePanel(featureId, view, menu);
}
Méthode FragmentActivity.onPreparePanel crée un menu pour tous les fragments attachés. Vous devez retourner la valeur true pour que le menu soit affiché. si vous retournez false, cela ne sera pas affiché.