Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将工具栏设置为片段中的actionbar_Java_Android_Android Actionbar_Fragment_Toolbar - Fatal编程技术网

Java 将工具栏设置为片段中的actionbar

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(真) 为

我想将我的工具栏设置为actionbar,但由于您的工具栏是layoutelement,它必须位于您的布局中。现在我的布局在我的片段中

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

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