我正在学习 android,我有点不确定菜单选项是如何工作的。这是我的设置,
I have a main activity which has a fragment inside it. Main activity's onCreateOptionsMenu looks like this
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
这个 menu_main.xml 只有设置按钮。我应该在 fragment 中添加一个刷新按钮,所以我创建了一个新的菜单 xml 并将这段代码添加到 fragment 类中
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.tempfragment, menu);
}
当我运行应用程序并长按时,我看到了刷新和设置按钮。
我的问题是,当我们有主 Activity 及其关联 fragment 的菜单选项时,流程是怎样的?它是否结合了两个菜单?我可以看到它正在合并,但我不确定它是如何在内部处理的?有人可以给我解释一下吗?
编辑 这是 fragment 的菜单文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_refresh" android:title="action_refresh"
app:showAsAction="never"
/>
</menu>
最佳答案
如果您有一个 MainActivity
来扩展选项菜单,menu_main.xml
,那么该选项菜单将始终出现在 MainActivity
创建。
在每个 fragment 代码中,您可以为该特定 fragment 创建选项菜单。假设您在 FriendsFragment
中扩充了 menu_friends.xml
。当 FriendsFragment
的实例由 MainActivity
创建时,menu_main.xml
和 menu_friends.xml
将被显示。您可以对所有 fragment 重复此操作。
编辑:@Kartheek 关于在取消 Activity 菜单的 fragment 中调用 setHasOptionsMenu(true)
的回答不正确。该语句所做的只是允许该 fragment 创建一个菜单。 两个菜单都将包括在内。看这里:
Calling setHasOptionsMenu(true) from a fragment results in multiple calls to onCreateOptionsMenu in Activity
关于android - 当我们将它们添加到 fragment 和主要 Activity 中时,选项菜单的流程是怎样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30841175/