Android 如何在应用程序运行时控制操作栏按钮?

Android 如何在应用程序运行时控制操作栏按钮?,android,android-actionbar,android-menu,Android,Android Actionbar,Android Menu,我有一个动作栏,在程序启动时显示。它的一个项(id/action\u delete)的enabled属性为false。在应用程序运行时,如何从其他方法控制它使其为true @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater();

我有一个动作栏,在程序启动时显示。它的一个项(id/action\u delete)的enabled属性为false。在应用程序运行时,如何从其他方法控制它使其为true

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.list_tasks, menu);
    return super.onCreateOptionsMenu(menu);
}
布局菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_delete"
        android:showAsAction="always"
        android:enabled="false"
        android:title="Delete"/>
    <item
        android:id="@+id/action_new"
        android:showAsAction="always"
        android:title="New"/>

</menu>

我不确定我是否理解你的问题。 我猜您希望动态更改操作栏中的操作项

使用onPrepareOptions菜单()方法


您还应该从中重写InvalidateOptions菜单()方法,这将声明选项菜单已更改,并且它将调用OnPrepareOptions菜单方法来重新创建菜单。

您的意思是,每当我要触发更改时,我调用InvalidateOptions菜单()?是的,您应该重写InvalidateOptions菜单()并调用它来触发更改。我不知道设置布尔变量是否是最有效的方法。但这取决于是什么导致或导致启用项的更改。如果这是引用动态更改的唯一方法,而不是创建一个方法并从OnPrepareOptions菜单方法调用它,那么我猜这就是直路。
@Override
    public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
    {


        setStatus = true;
        invalidateOptionsMenu();
    }
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{

    MenuItem item = menu.findItem(R.id.action_delete_assignment);

    if (setStatus)
    {
        item.setEnabled(true);
    }
    return super.onPrepareOptionsMenu(menu);

}
 @Override
  public boolean onPrepareOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    MenuItem item = menu.findItem(R.id.action_delete);
    //show the action item
    if  (your condition) {
        item.setEnabled(true);
        item.setVisible(true);
    }
    super.onPrepareOptionsMenu(menu);
    return true;
}