如何在多个片段中设置SupportSupportBar()?

Joh*_*ggs 5 android android-fragments appcompatactivity

我有两个支持片段坐在里面AppCompatActivity.根据设计,它们每个都有独特的工具栏和选项菜单.在AppCompatActivity没有工具栏,因为这些都包含在每个片段它的布局.

在每个片段中,我setHasOptionsMenu(true);在onCreate()中.

在onCreateView()中,我调用的((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);是工具栏是绑定到xml工具栏元素的对象.

onCreateOptionsMenu(),我首先调用super,然后调用menu.clear(),最后使用inflater.inflate(R.menu.searchbar_menu,menu)来扩展菜单;

失败的地方在于调用((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);这两个片段.在这样做时,选项将仅出现在第二个片段上而不出现在第一个片段上.如果我只在一个片段中调用它,则选项只在那个片段中按预期显示.当然,如果我不打电话,它们根本就不会出现.

这是我的代码.两个片段基本相同,但菜单膨胀除外:

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
     */
Run Code Online (Sandbox Code Playgroud)

有谁知道我可以设置两个片段以拥有他们的工具栏选项吗?

提前致谢.

nhp*_*nhp 1

当您调用时getActivity(),它会返回您的相同实例Activity。第二个片段的初始化晚于第一个片段,这就是为什么Activity只能支持第二个片段上的操作栏。

你可以试试这个

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        AppCompatActivity baseActivity = (AppCompatActivity) getContext();
        baseActivity.setSupportActionBar(yourToolbar);
    }
}
Run Code Online (Sandbox Code Playgroud)