Java 将工具栏设置为片段中的actionbar
我想将我的工具栏设置为actionbar,但由于您的工具栏是layoutelement,它必须位于您的布局中。现在我的布局在我的片段中 我在布局中添加了工具栏,并在片段中调用它:Java 将工具栏设置为片段中的actionbar,java,android,android-actionbar,fragment,toolbar,Java,Android,Android Actionbar,Fragment,Toolbar,我想将我的工具栏设置为actionbar,但由于您的工具栏是layoutelement,它必须位于您的布局中。现在我的布局在我的片段中 我在布局中添加了工具栏,并在片段中调用它: //Toolbar Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 它之所以有效,是因为我可以设置标题等等,但现在我想让它作为一个动作栏来反应,因为我想让它实际运行。setDisplayHomeAsUpEnabled(真) 为
//Toolbar
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
它之所以有效,是因为我可以设置标题等等,但现在我想让它作为一个动作栏来反应,因为我想让它实际运行。setDisplayHomeAsUpEnabled(真)
为此,我必须将工具栏更改为操作栏:
setSupportActionBar(toolbar);
这在我的片段中不起作用
有人能帮我让我的工具栏作为片段中的actionbar工作吗。actionbar是活动属性。如果要将给定片段中的工具栏设置为拥有该片段的活动的ActionBar,则获取拥有该片段的活动(
fragment.getActivity()
)并设置其ActionBar属性
然后,在将工具栏设置为ActionBar之后,使用与您在ActionBar上提到的相同的setDisplayHomeAsUpEnabled方法,以获取后退/向上按钮
如果您的应用程序在该活动中有多个片段,您显然必须小心地管理它。使用
((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("Your Title");
现在
ActionBarActivity
已被弃用,因此
您需要首先将活动从getActivity()
强制转换为AppCompatActivity
。下面是一个例子:
((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle();
您必须强制转换它的原因是getActivity()
返回一个FragmentActivity
,并且您需要一个AppCompatActivity
尝试:
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
如果使用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)
}
假设保存片段的活动是MainActivity 做
我只是想用光导航,所以我想这就是为什么我需要一个由我的工具栏组成的actionbar。我如何设置ActionBar属性?你能给我举个例子吗?为什么不把你的工具栏放在你的主要活动中,这样你就可以使用setSupportActionBar方法,因为我使用片段,我在片段中设置布局,而不是在活动中。因此,“我的活动”无法检测到片段中的工具栏,因为片段是在“活动”查找工具栏后加载的。在将工具栏设置为ActionBar后,请使用与您在ActionBar上提到的相同的setDisplayHomeAsUpEnabled方法(只需尝试,即可)。也更新了答案。这将返回NullPointerException。您需要在获取之前进行设置。(有点押韵)出于某种原因,这并不是在碎片中初始化工具栏,那么一个活动应用程序呢?java.lang.IllegalStateException:这个活动已经有了一个由window decor提供的操作栏。不要请求Window.FEATURE\u SUPPORT\u ACTION\u工具栏,并在主题中将windowActionBar设置为false以使用工具栏。
MainActivity main = (MainActivity)getActivity();
//You can access all public variable and methods of MainActivity.
//simply call
main.setSupportActionBar(toolbar)
main.getSupportActionBar.setTitle("title");