对片段使用工具栏

我正在尝试创建一个视图页导航器,该视图页可以滑动3个不同的片段,每个片段具有不同的工具栏。我之前已经在活动中实现了新的工具栏,并使其工作,但是我正在尝试使其与片段一起使用

这是片段代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout resource that'll be returned
    View rootView = inflater.inflate(R.layout.fragment_home, container, false);


    mToolbar = (Toolbar) rootView.findViewById(R.id.toolbar_home);
    if (mToolbar != null) {
        setSupportActionBar(mToolbar);
    }
    mToolbar.setTitle(null);

    return rootView;
}

我正在扩展我的片段,但是我得到了错误Fragment

Cannot resolve method setSupportActionBar

我不确定如何解决此问题,如果我删除代码,它会停止在某些设备上工作吗?setSupportActionBar


答案 1

片段没有这样的方法。ActionBar 是 Activity 的一个属性,因此要将工具栏设置为 ActionBar,您的活动应从 ActionBarActivity 扩展,然后您可以调用 Fragment:setSupportActionBar()

 ((ActionBarActivity)getActivity()).setSupportActionBar(mToolbar);

更新

如果您使用的是 AppCompatActivity

 ((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);

答案 2

我已经看到很多答案提到里面的工具栏,但是如果你有一个工具栏和一个单独的.setSupportActionBarFragmentActivityToolbarFragment

  1. 当您从活动的工具栏切换到片段的工具栏时,即使您尝试使用 覆盖,也可能会遇到重复。setSupportActionBarMenuItemsetHasOptionsMenu(true)
  2. 其次,如果您想更新活动的工具栏,您会看到您的更改不会因片段内部而反映出来。setSupportActionBar

因此,为了避免这种情况,我建议在片段中使用像这样的工具栏方法来膨胀菜单并使用

 toolbar = (Toolbar) view.findViewById(R.id.toolbar_frag);
    toolbar.inflateMenu(R.menu.frag_menu_items);
    Menu menu = toolbar.getMenu();

并使用界面接收菜单项单击事件。Toolbar.OnMenuItemClickListener

编辑(部分复制自MrEngineer13答案)

如果您担心后退按钮,可以像这样设置

toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       //What to do on back clicked
   }
});

推荐