2013-04-19 10 views
12

スタックオーバーフローに関する質問を見て、解決策を見つけることができませんでした。アクションバーにメニュー項目を表示して非表示にしようとしています

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

これにより、メニュー項目が表示されます(項目1と項目2)。 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の機能

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

上の1つのメニュー項目を非表示にすることが可能ですが、私は私が表示したい複数のメニュー私は非表示にする必要がある項目と他の人を持っています。 これについてはどうすればよいですか?

答えて

19

isDown変数を変更するには十分ではありません。可視性を変更するたびに、setVisible()メソッドに電話する必要があります。そのメソッドはブール値を設定するだけではありません。ブール値を変更するだけでは効果がありません。

isDownの値をfalseに変更した後、onPrepareOptionsMenu()を再度呼び出して、メニューを再起動するinvalidateOptionsMenu()に電話する必要があります。

unvisibleメニューアイテムを作るためにこのコードを試してみてください。

... 
isdown = false; 
invalidateOptionsMenu(); 
... 
+0

はい私はそれを知っていますが、onPrepareOptionsMenu(メニューメニュー){メニュー項目がクリックされるたびに呼び出され、それが動作するはずです。私は機能にメニューメニューを持っていない限り、可視性を設定することはできませんので、それは私が問題を抱えているところです – Dnaso

+0

私は参照してください。これをカバーする編集済みの投稿。 – tbkn23

+0

AHHH thats私が探していたthats。それがうまくいくかどうか試してみてください、ありがとうございます。 – Dnaso

11

あなたがonCreateOptionsMenu() を実行した後、任意の場所にあるメニューを非表示にしたい場合は

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

そしてちょうどの値を変更、これを試してみてくださいisdownこのコードを繰り返し、

menu.findItem(R.id.menu_settings).setVisible(isdown); 
menu.findItem(R.id.menu_save).setVisible(isdown); 
+0

私はonPrepareOptionsMenuが良いと思われると聞きましたが、違いは何ですか? – Dnaso

+0

これで私のクラスの任意の関数にmenu.findアイテムを置くことができます。 – Dnaso

+0

はい、あなたのクラスのどこにいてもメニュー項目を見つけて、表示/非表示にする!、あなたはそれをチェックしていますか? –

0

方法FragmentActivity.onPreparePanelが接続されているすべてのフラグメントのためのメニューを作成します

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

あなたFragmentActivityでこれを試してみてください。メニューを表示するにはtrueを返す必要があります。 falseを返すと表示されません。

0

私は2つのアイテム、最初に:アイテムを保存する、2番目:アイテムを編集するメニューを持っています。私が編集に来た時、最初に「アイテムを保存」が隠されていて、「アイテムを編集」をクリックすると「アイテムを保存」が表示されました。

ので:

  1. isHidden()
  2. onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. セットの可視性でそれに
  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()); 

は、最後にそれが動作します。

関連する問題