我的Activity中有一个片段,片段有自己的工具栏。像这样:
这是片段的布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hometsolutions.space.Fragments.ControlFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/Setup_next_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view_setup_next"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toBottomOf="@+id/setup_next_recycler" />
</LinearLayout>
</FrameLayout>
我想在Setup_next_toolbar上添加菜单。不在MainActivity工具栏上。
我在片段上做了这个:
<{1}}:onCreate
上的
然后
setHasOptionsMenu(true);
但是它在MainActivity tolbar上添加了菜单。如何在 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.Setup_next_menu, menu);
}
?
答案 0 :(得分:7)
可能为时已晚,但只是解决了同样的问题并认为你想知道。所有你只需设置活动工具栏
((MainActivity) getActivity()).setSupportActionBar(toolbar);
setHasOptionsMenu(true);
这将触发片段
中的onCreateOptionsMenu
答案 1 :(得分:2)
您可以在工具栏中设置ImageView,并在单击ImageView时打开弹出菜单,并在弹出菜单中处理菜单项单击。
<android.support.v7.widget.Toolbar
app:layout_collapseMode="pin"
android:fitsSystemWindows="false"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent>
<ImageView
android:layout_marginRight="8dp"
android:id="@+id/overflow_menu"
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"
app:srcCompat="@drawable/overflow_menu"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</android.support.v7.widget.Toolbar>
内部片段
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Other stuff
ImageView overflowMenuImageView = view.findViewById(R.id.overflow_menu);
overflowMenuImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(getActivity(), view);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if(item.getItemId() == R.id.menu_item_id){
//Do your thing
}
return false;
}
});
popupMenu.inflate(R.menu.my_menu);
popupMenu.show();
}
});
}
答案 2 :(得分:-2)
在setHasOptionsMenu(true)
onCreate()
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
答案 3 :(得分:-2)
试试这个:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//TODO Add your menu entries here
inflater.inflate(R.menu.menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}