工具栏作为片段中的操作栏

Posted

技术标签:

【中文标题】工具栏作为片段中的操作栏【英文标题】:Toolbar as action bar in Fragment 【发布时间】:2017-01-23 14:22:36 【问题描述】:

在我的应用程序中,我使用 NoActionBar 样式,并且我想将操作栏添加到我的片段之一。

在活动中我可以这样做:

public class MyActivity extends AppCompatActivity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    

如何在片段中做到这一点?

我试过了:

    @Override
    public void onCreate(Bundle savedInstanceState) 
        setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
    

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
        inflater.inflate(R.menu.menu_main, menu);
        super.onCreateOptionsMenu(menu, inflater);
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 

        Toolbar actionBar = (Toolbar) getActivity().findViewById(R.id.my_app_bar);
        ((AppCompatActivity) getActivity()).setSupportActionBar(actionBar);

        return inflater.inflate(R.layout.fragment_training, container, false);

    

但它不起作用。

UPD 我认为这一行的问题:

Toolbar actionBar = (Toolbar) getActivity().findViewById(R.id.my_app_bar);
((AppCompatActivity) getActivity()).setSupportActionBar(actionBar);

【问题讨论】:

您能否进一步解释一下您所说的不起作用?只是没有出现该栏吗?有没有错误? Bar只是没有出现...这意味着工具栏(来自片段布局的my_app_bar)出现了。但是这个工具栏没有填充来自 main_menu 的项目 【参考方案1】:

老问题)),应该是:

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) 

     //Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.my_app_bar);
     //((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
     //return inflater.inflate(R.layout.fragment_training, container, false);

     View v = inflater.inflate(r.layout.fragment_training, container, false);
     Toolbar toolbar = (Toolbar) v.findviewbyid(r.id.my_app_bar);
     ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
     return v;

【讨论】:

【参考方案2】:

也许你需要,

((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle();

这 2 个链接将对您有所帮助, Set up toolbar as actionbar in fragment

How to get Toolbar from fragment?

希望这会有所帮助。

【讨论】:

设置字幕是什么意思?只是设置文本?

以上是关于工具栏作为片段中的操作栏的主要内容,如果未能解决你的问题,请参考以下文章

带有片段的操作栏的行为? [关闭]

Android中每个片段的不同操作栏 - 最佳方法?

Android - 试图实例化一个不是片段的类

操作栏标签片段中的片段?

独立工具栏和作为操作栏的工具栏有啥区别?

使用 setSupportActionBar 后删除 Toolbar 作为操作栏