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

时间:2014-03-16 13:34:25

标签: android android-actionbar android-menu

我有一个操作栏,在程序启动时显示。其中一个项目(id / action_delete'的enabled属性为false。如何在应用程序运行时从其他方法控制它以使其成立。

@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>

点击事件

@Override
    public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
    {


        setStatus = true;
        invalidateOptionsMenu();
    }

onPrepareOptionsMenu

@Override
public boolean onPrepareOptionsMenu(Menu menu)
{

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

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

}

1 个答案:

答案 0 :(得分:2)

我不确定我理解你的问题。 我想您想动态更改操作栏中的操作项。

使用onPrepareOptionsMenu()方法。

 @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;
}

您还应该覆盖Activity class中的invalidateOptionsMenu()方法。这将声明选项菜单已更改,并将调用onPrepareOptionsMenu方法重新创建菜单。