我的MainActivity上有我的AppBar。我的MainActivity有一个像片段容器一样的布局。
我想要实现的是,我希望我的App Bar图标可以根据当前顶部的碎片进行更改。
这样的事情:
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,但它应该比那更容易,不是吗?
在主活动中添加一个方法,如下所示:
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>
对于其他自定义图标,您只需更新其视图即可。希望能帮助到你。
如果你的AppBar
与某些Fragments
不同,你应该把AppBar
放在Fragment
里面。现在你可能能够管理用AppBar
改变你的FragmentTransactions
,但是当你正在构建后退/向上导航或深层链接时它会开始破坏你希望你从一开始就把它放在Fragment中。
编辑:当用户点击菜单项时,你知道用户正在导航到什么Fragment
,因为你自己在做FragmentTransaction
。然而,当用户按下后退按钮时,Android将为您执行FragmentTransaction
,并且判断用户导航到的Fragment
变得更加困难。你可以循环通过Fragments
中的所有FragmentManager
并检查Fragment
是什么可见但同时可能有多个Fragments
可见(例如ViewPager
或平板电脑视图)。当用户通过深层链接进入您的应用程序时,管理Fragments
和后台堆栈已经很痛苦了。
当您的应用程序增长时,导航将变得越来越复杂。你的未来自己会感谢你把AppBar
放在Fragment
而不是Activity
,因为你不必担心它会与当前显示的Fragment
保持同步。