我的选项菜单中有这个项目:
<item
android:id="@+id/opt_mnu_action"
android:icon="@android:drawable/ic_dialog_info"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="New">
</item>
在主 FragmentActivity 中创建的菜单本身。我想根据打开的 Fragment 以编程方式更改此项目的图标,并且显然,当用户点击此按钮时会有不同的操作。我尝试了几件事来做到这一点,但没有任何效果。我尝试的最后一件事是我的 Fragment 的 onCreateView 方法中的这段代码:
MenuItem mi = (MenuItem) view.findViewById(R.id.opt_mnu_action);
mi.setIcon(R.drawable.ico_1);
但是我的应用程序崩溃了。那么有没有办法做到这一点?
**更新**
这就是我现在要做的事情,全部在我的主要主要 FragmentActivity 中: 首先,MenuItem action_button;
我的层次结构视图中有一个。然后在我的onCreateOptionsMenu
方法中实例化它:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
action_button = menu.findItem(R.id.opt_mnu_action);
return super.onCreateOptionsMenu(menu);
}
然后我创建了这个函数来根据打开的选项卡更改图标:
public void change_action_button_icon(int tab_position)
{
switch(tab_position)
{
case 0:
action_button.setIcon(R.drawable.ico_1);
break;
case 1:
action_button.setIcon(R.drawable.ico_2);
break;
case 2:
action_button.setIcon(R.drawable.ico_3);
break;
}
invalidateOptionsMenu();
}
我在我的onTabSelected
方法中调用它:
public void onTabSelected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition());
setTab_position(tab.getPosition());
change_action_button_icon(tab.getPosition());
}
但是一旦我启动我的应用程序 - 它就会崩溃。我NullPointerException
在这一行得到错误:
action_button.setIcon(R.drawable.ico_1);
action_button
我的猜测 - 发生这种情况是因为在实例化之前请求了图标更改。但我不知道如何克服它...