web-dev-qa-db-ja.com

アクションバーでメニュー項目を表示および非表示にしようとしています

スタックオーバーフローに関する質問を調べましたが、解決策が見つかりません。

@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;
}

これにより、メニュー項目が表示されるように設定されます(item1およびitem2)。 onclickは正常に機能します

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);
    }
}

次に、これによりisdownブール値がfalseに設定されます。スタック上の人々は、onPrepareOptionsMenuはクリックするたびに起動するはずだと言いますが、そうではありません。 onclick関数で1つのメニュー項目を非表示にできます

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.menu_settings: 
            Log.v("Log:","edit_item pressed");
            return true;
    }
}

しかし、非表示にする必要のあるメニュー項目と表示したい項目が複数あります。どうすればこれについて行くことができますか?

12
Dnaso

isDown変数を変更するだけでは不十分です。可視性を変更するたびに、setVisible()メソッドを呼び出す必要があります。このメソッドは、ブール値を設定するだけではないため、ブール値を変更するだけでは不十分です。

isDownの値をfalseに変更した後、invalidateOptionsMenu()を呼び出す必要があります。これにより、onPrepareOptionsMenu()を再度呼び出すことでメニューが再起動します。

メニュー項目を非表示にするには、次のコードを試してください。

...
isdown = false;
invalidateOptionsMenu();
...
19
tbkn23

これを試して、

_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);
}
_

どこでもメニューを非表示にしたい場合は、onCreateOptionsMenu()を実行した後、isdownの値を変更して、このコードを繰り返します。

_menu.findItem(R.id.menu_settings).setVisible(isdown);
menu.findItem(R.id.menu_save).setVisible(isdown);
_
11
Sino Raj

2つのアイテムがあるメニューがあります。1つ目はアイテムの保存、2つ目はアイテムの編集です。編集に来たときに欲しかったのですが、最初は「アイテムを保存」が非表示になっていて、「アイテムを編集」をクリックすると「アイテムを保存」が表示されていました。

そう:

  1. パブリックでアイテムを宣言する
  2. onCreateOptionsMenu(Menu menu, MenuInflater inflater)で値を設定します
  3. 可視性をisHidden()に設定します
  4. 次に、必要なすべての場所で、可視性をisVisible()に設定します

公共地域:

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());
}

私が欲しいところ:

saveItem.setVisible(isVisible());

最後に、それは私が望むように機能します。

0
mortezahosseini

FragmentActivityでこれを試してください

public boolean onPreparePanel(int featureId, View view, Menu menu) {
    if(isLeftMenuOpened()) return false;
    return super.onPreparePanel(featureId, view, menu);
}

メソッドFragmentActivity.onPreparePanelは、添付されているすべてのフラグメントのメニューを作成します。メニューを表示するには、trueを返す必要があります。 falseを返すと、表示されません。

0
user1275972