2013-12-17 35 views
1

我想顯示菜單,當點擊一個特定的形象:菜單按鈕的工作原理只是一次

popup_but = (ImageView) findViewById(R.id.imageView2); 
popup_but.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     showmen(); 
    } 
}); 

和菜單:

public void showmen() { 
    PopupMenu popup = new PopupMenu(First.this, popup_but); 
    popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu()); 
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
     public boolean onMenuItemClick(MenuItem item) { 
      switch (item.getItemId()) 
      { 
       case R.id.men1: 
        //do something 
       return true; 
       case R.id.men5: 
        finish(); 
       return true; 
      } 
      return true; 
     } 
    }); 
    popup.show(); 
} 

它。作品。現在我想在點擊硬件菜單按鈕時也這樣做。所以我用這個代碼:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    showmen(); 
} 

問題就在這裏:當菜單按鈕,點擊它只是顯示菜單首次

回答

0

拿在onPrepareOptionsMenu一看:

在Android 2.3.x及更低版本,每當用戶打開選項菜單(按下菜單按鈕)時,系統會調用onPrepareOptionsMenu() 。

在Android 3.0及更高版本上,當菜單項出現在操作欄中時,選項菜單始終被認爲是打開的 。當事件 發生並且您想要執行菜單更新時,您必須致電 invalidateOptionsMenu()請求系統調用 onPrepareOptionsMenu()。

0

onCreateOptionsMenu()每次單擊硬件菜單按鈕時被調用,並且每次都返回true。我所做的是,使用XML對菜單項進行樣式設置,然後在onCreateOptionsMenu()內對XML進行充氣。每次點擊硬件菜單時,菜單都會從XML中膨脹。 onPrepareOptionsMenu()僅適用於在應用程序生命週期中更改菜單項的情況。這個問題,我認爲是在你的執行showmen()。我認爲PopupMenu.OnMenuItemClickListener只是第一次,而不是每次。