将工具栏设置为片段中的操作栏

时间:2014-11-20 01:25:44

标签: java android android-actionbar fragment toolbar

我想将工具栏设置为操作栏,但由于工具栏是一个布局,因此必须在您的布局中。现在我的布局在我的片段中。

我在布局中添加了工具栏,我在片段中调用它:

//Toolbar
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);

它的作用是因为我可以设置标题等等,但现在我希望它作为动作栏做出反应,因为我想实际拥有它。 setDisplayHomeAsUpEnabled(真)

要做到这一点,我必须将工具栏更改为操作栏:

setSupportActionBar(toolbar);

这在我的片段中不起作用......

任何人都可以帮助我让我的工具栏作为片段中的操作栏工作。

6 个答案:

答案 0 :(得分:48)

现在不推荐使用ActionBarActivity 您需要先将活动从getActivity()投射到AppCompatActivity。这是一个例子:

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

您必须投放它的原因是因为getActivity()返回FragmentActivity而您需要AppCompatActivity

答案 1 :(得分:25)

尝试:

 ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);

答案 2 :(得分:16)

ActionBar是一个Activity属性。如果要将给定片段中的工具栏设置为拥有Activity的ActionBar,则获取拥有该片段(Fragment.getActivity())的Activity并设置其ActionBar属性。

然后,在将工具栏设置为ActionBar以获取后退/上移按钮后,juse使用您在ActionBar中提到的相同setDisplayHomeAsUpEnabled方法。

如果您的应用在该活动中有多个片段,您显然必须谨慎管理。

答案 3 :(得分:7)

使用

((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("Your Title");

答案 4 :(得分:0)

如果您使用Kotlin,请尝试以下操作:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, state: Bundle?): View? { 
        (activity as AppCompatActivity).setSupportActionBar(your_toolbar)
        setHasOptionsMenu(true)

        return inflater.inflate(R.layout.your_layout, container, false)
}


override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
        inflater?.inflate(R.menu.your_menu, menu)
}

答案 5 :(得分:0)

让我们说持有该片段的Activity是MainActivity。

MainActivity main = (MainActivity)getActivity();
//You can access all public variable and methods of MainActivity.
//simply call 
main.setSupportActionBar(toolbar)
main.getSupportActionBar.setTitle("title");