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

问题描述 投票:0回答:2

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

java android android-fragments appbar
2个回答
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>

对于其他自定义图标,您只需更新其视图即可。希望能帮助到你。


0
投票

如果你的AppBar与某些Fragments不同,你应该把AppBar放在Fragment里面。现在你可能能够管理用AppBar改变你的FragmentTransactions,但是当你正在构建后退/向上导航或深层链接时它会开始破坏你希望你从一开始就把它放在Fragment中。

编辑:当用户点击菜单项时,你知道用户正在导航到什么Fragment,因为你自己在做FragmentTransaction。然而,当用户按下后退按钮时,Android将为您执行FragmentTransaction,并且判断用户导航到的Fragment变得更加困难。你可以循环通过Fragments中的所有FragmentManager并检查Fragment是什么可见但同时可能有多个Fragments可见(例如ViewPager或平板电脑视图)。当用户通过深层链接进入您的应用程序时,管理Fragments和后台堆栈已经很痛苦了。

当您的应用程序增长时,导航将变得越来越复杂。你的未来自己会感谢你把AppBar放在Fragment而不是Activity,因为你不必担心它会与当前显示的Fragment保持同步。

© www.soinside.com 2019 - 2024. All rights reserved.