根据上下文(片段)更改AppBar的图标

时间:2018-07-03 15:41:51

标签: java android android-fragments appbar

我的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 ,但是应该比这更容易,不是吗?

2 个答案:

答案 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>

对于其他自定义图标,您可以简单地通过其视图进行更新。 希望对您有所帮助。