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

问题描述 投票:0回答:7

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

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

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

它有效,因为我可以设置标题等,但现在我希望它作为操作栏反应,因为我实际上想要它。 setDisplayHomeAsUpEnabled(true)

为此,我必须将工具栏更改为操作栏:

setSupportActionBar(toolbar);

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

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

java android android-actionbar fragment toolbar
7个回答
68
投票

现在

ActionBarActivity
已被弃用,因此 您需要先将活动从
getActivity()
转换为
AppCompatActivity
。这是一个例子:

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

你必须投射它的原因是因为

getActivity()
返回一个
FragmentActivity
并且你需要一个
AppCompatActivity


32
投票

尝试:

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

18
投票

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

Fragment.getActivity()
) 并设置其 ActionBar 属性。

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

如果您的应用程序在该 Activity 中有多个片段,您显然必须小心管理。


7
投票

使用

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

2
投票

如果您使用 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)
}

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");

0
投票

如果你使用 kotlin

 (activity as AppCompatActivity).setSupportActionBar(toolbar)

工具栏可以通过

findViewById
方法或通过
viewBinding

初始化
© www.soinside.com 2019 - 2024. All rights reserved.