当从ActionBar
菜单中选择一个项目时,我需要在NavigationDrawer
的菜单右上角添加一个图标。
所以我创建了一个名为'blog
'的新文件,扩展了Fragment
,我在其中写了应该管理菜单操作栏的onCreateOptionsMenu
方法吗?< / p>
这是我的代码:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
public class Blog extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.blog, container, false);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.blog_menu, menu);
return super.onCreateOptionsMenu(menu);
}
}
Android工作室用红色写这行代码:
MenuInflater inflater = getMenuInflater();
所以我认为这是错的,但我不明白这是什么问题......有什么帮助吗?
答案 0 :(得分:4)
要控制Fragment
内的菜单,您需要调用此方法:
setHasOptionsMenu(true);
在onCreateView
方法内。然后,您需要MenuInflater
,如下所示:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem itemBlog = menu.add(Menu.NONE, // Group ID
R.id.blog_item, // Item ID
1, // Order
R.string.blog_item); // Title
itemBlog.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); // ShowAsAction
itemBlog.setIcon(R.drawable.ic_action_blog); // Icon
// add your item before calling the super method
super.onCreateOptionsMenu(menu,inflater);
}
我不知道是否是这种情况,但如果您使用AppCompat
库,则应按以下步骤操作:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem itemBlog = menu.add(Menu.NONE, // Group ID
R.id.action_blog, // Item ID
101, // Order
"Blog"); // Title
// To showAsAction attribute, use MenuItemCompat (set to always)
MenuItemCompat.setShowAsAction(itemBlog, MenuItem.SHOW_AS_ACTION_ALWAYS);
itemBlog.setIcon(R.drawable.ic_action_blog);
super.onCreateOptionsMenu(menu, inflater);
}
这很有效。