我的MainActivity上有我的 AppBar 。我的MainActivity的布局就像碎片容器一样。
我想要完成的是,我希望我的 AppBar 图标根据当前顶部的Fragment进行更改。
类似这样的东西:
switch (item.getItemId()){
case R.id.semanario:
fragmentTransaction.replace(R.id.viewPagerMainContenedor, new FragmentSemanario());
fragmentTransaction.addToBackStack(null).commit();
myToolbar.SETICON(R.drawable.iconExample) (And how to change the xml atributte "app:showAsAction = always)
break;
我考虑过为每个片段制作一个 AppBar ,但是应该比这更容易,不是吗?
答案 0 :(得分:0)
如果您的AppBar
与某些Fragments
不同,则应将AppBar
放在Fragment
内。现在,您可能可以使用AppBar
来更改FragmentTransactions
,但是稍后在构建后退/上导航或深层链接时,它会开始中断,您希望可以放下从一开始就将其放入片段中。
编辑:当用户单击菜单项时,您知道用户正在导航到Fragment
,因为您自己在FragmentTransaction
。但是,当用户按下后退按钮时,Android会为您执行FragmentTransaction
,这将使判断用户导航到Fragment
的难度变得更大。您可以遍历Fragments
中的所有FragmentManager
并检查哪些Fragment
是可见的,但同时可能有多个Fragments
可见(例如ViewPager
或平板电脑观看次数)。当用户通过深层链接进入您的应用程序时,管理Fragments
和后堆栈已经是***的麻烦。
当您的应用程序增长时,导航将变得越来越复杂。您未来的自我将感谢您将AppBar
放入Fragment
而不是Activity
,因为您不必担心与当前显示的{{1}保持同步}。
答案 1 :(得分:0)
在主要活动中添加一个方法,如下所示:
updateToolbar(int title, int drawable){
toolbar.setTitle(title);
toolbar.setIcon(drawable);
}
,然后从片段中调用此方法:
getActivity().updateToolbar(title,R.drawable.icon);
要更改操作溢出图标:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>
<style name="OverFlow"
parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:src">@drawable/my_overflow_menu</item>
</style>
对于其他自定义图标,您可以简单地通过其视图进行更新。 希望对您有所帮助。