单击按钮后如何禁用菜单中的项目?
问题描述:
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涵盖所有。