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 :(得分: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);
}
}
答案 1 :(得分:0)
参考来自: Android: How to enable/disable option menu item on button click?
创建活动后,onCreateOptionsMenu()方法就是 如上所述,只召唤一次。系统保留并重新使用 您在此方法中定义的菜单,直到您的活动被销毁。如果 您想在首次创建后随时更改选项菜单, 你必须覆盖onPrepareOptionsMenu()方法。这传递给你 当前存在的Menu对象。如果您愿意,这很有用 删除,添加,禁用或启用菜单项取决于当前 申请状态。
你可以调用方法invalidateOptionsMenu();在按钮的点击监听器中。它会再次调用onPrepareOptionsMenu(),所有你要禁用的逻辑都可以写在这里。
无论如何,documents涵盖所有。