【发布时间】:2017-06-13 22:28:05
【问题描述】:
我在AppCompatActivity 中有两个支持片段。根据设计,它们每个都有独特的工具栏和选项菜单。 AppCompatActivity 的布局中没有工具栏,因为它们包含在每个片段中。
在每个片段中,我在 onCreate() 中 setHasOptionsMenu(true);。
在 onCreateView() 中,我调用 ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);,其中工具栏是绑定到 xml 工具栏元素的对象。
在onCreateOptionsMenu() 中,我首先调用super,然后调用menu.clear(),最后使用inflater.inflate(R.menu.searchbar_menu, menu); 膨胀菜单;
失败的地方是在两个片段中调用((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);。这样做时,选项只会出现在第二个片段上,而不是第一个片段上。如果我只在一个片段中调用它,则选项只会在那个片段中按预期显示。当然,如果我都没有调用,它们根本不会出现。
这是我的代码。两个 Fragment 基本上是相同的,只是菜单被夸大了:
public class FeedFragment extends Fragment implements FeedView{
@BindView(R.id.toolbar)
Toolbar toolbar;
FeedPresenter presenter;
static final String TAG = "FEED_FRAGMENT";
/*
* Some boilerplate fragment setup code
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_feed, container, false);
ButterKnife.bind(this, view);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
setupToolar();
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.searchbar_menu, menu);
}
private void setupToolbar(){
toolbar.setPadding(0,ScreenUtil.getStatusBarHeight(this.getActivity()),0,0);
toolbar.setTitle("");
}
/*
* Other logic code unique to each fragment
*/
有谁知道我可以将两个片段都设置为具有它们的工具栏选项吗?
提前致谢。
【问题讨论】:
-
我认为您想要做的是让活动设置一个基本工具栏以及任何基本(共享)菜单项,并在
onCreateOptionsMenu中添加每个片段唯一的项目。或者,如果您知道一个 Fragment 将始终出现在另一个之前,您只需在第一个 Fragment 中设置工具栏后,在第二个 Fragment 中添加您需要的内容。 -
添加答案可能为时已晚,但希望对您有所帮助...
-
@johnriggs 你解决了这个问题吗?我也面临同样的情况
-
@ZayidMohammed 遗憾的是我没有
标签: android android-fragments appcompatactivity