2017-05-26 162 views
0
public class MainActivity extends AppCompatActivity { 


    private final int item_4 = 4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button btn = (Button) findViewById(R.id.btn); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onPrepareOptionsMenu(); 
      } 
     }); 


    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 


     MenuInflater mi = getMenuInflater(); 
     mi.inflate(R.menu.menu_main, menu); 


     menu.add(Menu.NONE, item_4, Menu.NONE, "Show"); 

     menu.add(Menu.NONE, item_4, Menu.NONE, "Hide"); 


     menu.add("Reset"); 




     return true; 

    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 




     switch (item.getItemId()) { 
      case R.id.item1: 

       Toast.makeText(this, "You Pressed Settings", Toast.LENGTH_SHORT).show(); 
       return true; 


      case R.id.item2: 
       Toast.makeText(this, "You Pressed Create", Toast.LENGTH_SHORT).show(); 
       return true; 

      case R.id.item3: 
       Toast.makeText(this, "You Pressed Delete", Toast.LENGTH_SHORT).show(); 
       return true; 


      case item_4: 
       Toast.makeText(this, "You Pressed Hide", Toast.LENGTH_SHORT).show(); 
       return true; 

      default: 
       return super.onOptionsItemSelected(item); 

     } 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     MenuItem mii = menu.findItem(R.id.item2); 
     mii.setEnabled(false); 


     return super.onPrepareOptionsMenu(menu); 
    } 
} 

在上面的代碼中,我創建了應用程序欄的菜單項列表,並且在應用程序中創建了一個按鈕,並且我希望在按鈕單擊後禁用某些項目,但我無法做到這一點因爲我不gettig如何調用onPrepareOptionsMenu()上按鈕單擊?任何人都可以建議如何禁用按鈕單擊後的菜單項的解決方案?單擊按鈕後如何禁用菜單中的項目?

回答

0

我將展示簡單的例子:

只有一個音符此方法:不要忘記清除菜單項(menu.clear();)在每一個方法的開始。

實施例:

import android.app.Activity; 
 

 
import android.os.Bundle; 
 

 
import android.view.Menu; 
 

 
import android.view.View; 
 

 
import android.view.View.OnClickListener; 
 

 
import android.widget.Button; 
 

 
/** 
 

 
* Class which shows how to change dynamically options menu items 
 

 
*/ 
 

 
public class Main extends Activity { 
 

 
private Button clickBtn; 
 

 
private boolean isChangedStat = false; 
 

 
private static final int MENUITEM = Menu.FIRST; 
 

 
@Override 
 

 
public void onCreate(Bundle savedInstanceState) { 
 

 
super.onCreate(savedInstanceState); 
 

 
setContentView(R.layout.main); 
 

 
clickBtn = (Button) findViewById(R.id.click); 
 

 
clickBtn.setText("Click me"); 
 

 
clickBtn.setOnClickListener(new OnClickListener() { 
 

 
@Override 
 

 
public void onClick(View v) { 
 

 
if(isChangedStat) { 
 

 
isChangedStat = false; 
 

 
} else { 
 

 
isChangedStat = true; 
 

 
} 
 

 
} 
 

 
}); 
 

 
} 
 

 
@Override 
 

 
public boolean onPrepareOptionsMenu(Menu menu) { 
 

 
menu.clear(); 
 

 
if(isChangedStat) { 
 

 
menu.add(0, MENUITEM, 0, "True"); 
 

 
} else { 
 

 
menu.add(0, MENUITEM, 0, "False"); 
 

 
} 
 

 
return super.onPrepareOptionsMenu(menu); 
 

 
} 
 

 
}

0

參考從: Android: How to enable/disable option menu item on button click?

一旦創建了活動時,onCreateOptionsMenu()方法是 調用一次,如上所述。系統保留並重新使用您在此方法中定義的菜單,直到您的活動被破壞。如果 您想要在第一次創建後的任何時候更改選項菜單,您必須重寫onPrepareOptionsMenu()方法 。這會將當前存在的Menu對象傳遞給您 。如果您希望 根據應用程序的當前狀態刪除,添加,禁用或啓用菜單項,這非常有用。

你可以調用方法invalidateOptionsMenu();在你的按鈕的點擊監聽器中。它會再次調用onPrepareOptionsMenu(),所有你禁用的邏輯可以寫在這裏。

無論如何,documents涵蓋所有。