[英]How to use different menu in fragment than in activity?
我想要一個用於我的主要活動的菜單和一個用於包含在主要活動中的片段的菜單。 應刪除主活動菜單,並在片段可見時擴充片段菜單。 我試圖實現這一點,但這是結果:
主要活動菜單片段本身:
顯示片段時的主要活動菜單片段:
顯然,盡管創建並擴充了片段菜單,但我並沒有替換主要活動中的菜單,而是將其添加到其中。
這是負責此活動的代碼:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// Depending on which fragment is used display different actions.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
這是片段中負責此操作的代碼:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.friend_menu, menu);
}
這是 friend_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:icon="@drawable/ic_person_add_black_24dp"
android:id="@+id/nav_person_add"
android:title="Add people"
app:showAsAction="ifRoom" />
</menu>
我如何獲得我想要的菜單(沒有搜索操作和 add_friend 操作)? 我意識到從活動中管理它可能更簡單,並且只在顯示片段時才膨脹特定的片段菜單,就像活動中的評論說的那樣: // Depending on which fragment is used display different actions.
如果你想保持你的結構,你可以嘗試clear()
菜單。
在你的Fragment
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear(); // Remove all existing items from the menu, leaving it empty as if it had just been created.
inflater.inflate(R.menu.friend_menu, menu);
}
什么對我有用
在你的onCreateView
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
}
在你的onCreateOptionsMenu
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.setGroupVisible(0,false);
inflater.inflate(R.menu.new_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.