编程语言
首页 > 编程语言> > android-具有多个片段的单个活动应用程序不显示向上导航

android-具有多个片段的单个活动应用程序不显示向上导航

作者:互联网

我有一个具有单个主要活动的android应用程序,该活动使用了许多进入视图的片段.我不确定这是否是正确的方法,但是我已经继承了这个项目,并希望避免进行任何主要的重构,例如将片段更改为活动或类似的东西.

根据android文档,默认情况下,调用setDisplayHomeAsUp(bool)函数应该只显示向上按钮:

Set whether home should be displayed as an “up” affordance. Set this
to true if selecting “home” returns up by a single level in your UI
rather than back to the top level or front page.

主要问题是当我使用该函数时:

actionBar.setDisplayHomeAsUpEnabled(true);

它没有设置打开导航抽屉的按钮,而是变成了“向上”按钮.它只是从侧面删除了“汉堡” ic_drawer图标.导航抽屉仍然打开.

这是NavigationDrawerFragment的自定义代码(我复制粘贴了在android studio中创建带有导航抽屉的新应用程序时得到的确切文件):

NavigationDrawerFragment.java

06001

然后,我将所有其他片段都扩展为“ BaseAppFragment”,其中包含以下内容:

BaseAppFragment.java

public class BaseAppFragment extends Fragment {

06002

这就是让我可以在单个区域上更改操作栏上的标题并设置是否默认情况下应设置后退按钮的原因.

MainActivity.java

public void onSectionAttached(android.app.Fragment fragment) {
Class fragmentType = fragment.getClass();

06003

标题设置工作正常,调用setDisplayHomeAsUpEnabled(true)时没有错误,但仍不显示向上按钮.我知道,除了片段事务中的addToBackStack(null)调用之外,我现在没有设置任何类型的片段导航层次结构,但是似乎此代码仍足以使向上按钮替换导航抽屉按钮.

解决方法:

问题在于导航抽屉图标劫持了向上指示器.就操作栏中哪个“视图”显示图标而言,导航抽屉图标也是向上图标.这就是为什么您需要调用actionBar.setDisplayHomeAsUpEnabled(true);的原因.以显示导航抽屉图标.

要解决此问题,您需要使用ActionBarDrawerToggle#setDrawerIndicatorEnabled(false).这会将导航抽屉图标替换为向上图标.从此方法的文档中:

When the indicator is disabled, the ActionBar will revert to displaying the home-as-up indicator provided by the Activity’s theme in the android.R.attr.homeAsUpIndicator attribute instead of the animated drawer glyph.

标签:android-navigation,android
来源: https://codeday.me/bug/20191029/1957898.html