单击按钮后如何禁用菜单中的项目?

问题描述:

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()上按钮单击?任何人都可以建议如何禁用按钮单击后的菜单项的解决方案?单击按钮后如何禁用菜单中的项目?

我将展示简单的例子:

只有一个音符此方法:不要忘记清除菜单项(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); 
 

 
} 
 

 
}

参考从: Android: How to enable/disable option menu item on button click?

一旦创建了活动时,onCreateOptionsMenu()方法是 调用一次,如上所述。系统保留并重新使用您在此方法中定义的菜单,直到您的活动被破坏。如果 您想要在第一次创建后的任何时候更改选项菜单,您必须重写onPrepareOptionsMenu()方法 。这会将当前存在的Menu对象传递给您 。如果您希望 根据应用程序的当前状态删除,添加,禁用或启用菜单项,这非常有用。

你可以调用方法invalidateOptionsMenu();在你的按钮的点击监听器中。它会再次调用onPrepareOptionsMenu(),所有你禁用的逻辑可以写在这里。

无论如何,documents涵盖所有。