在操作栏中的返回按钮打开和关闭导航抽屉

3

我在我的主活动中设置了一个导航抽屉。在我的一个片段中,我想隐藏汉堡图标并显示返回箭头(已实现)。

   ActionBar bar = mMainActivity.getSupportActionBar();
   bar.setDisplayShowHomeEnabled(true);
   bar.setDisplayHomeAsUpEnabled(true);
   bar.setDefaultDisplayHomeAsUpEnabled(true);

问题是,如果我点击箭头,它会打开抽屉。所以我添加了这个:mMainActivity.mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); 问题是,当我添加了这一行,什么都没有显示。抽屉图标和返回或向上的图标都没有。所以有人可以告诉我我做错了什么吗?
编辑
似乎有些混淆关于我已经做过什么和没有做过什么。 mMainActivity.mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); 是暂时添加的,我再次将其删除,因为当我这样做时,没有图标显示,无论是导航抽屉还是返回箭头。
下面是我如何处理菜单项点击的方式:
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        switch (item.getItemId()){
            case R.id.search_badge:
                L.i("search", "search");
                return false;


            case android.R.id.home:
                L.i("home", "home pressed");
                break;

            case R.id.action_done:

                actionDone();
                //for testing
                //checkSelectedInterests();
                //TODO: MLC
                L.i("done", "done pressed");
                break;

            default:
                ;;
        }
        return super.onOptionsItemSelected(item);
    }

然而
 case android.R.id.home:
                L.i("home", "home pressed");
                break;

从未被触发

希望这能澄清问题。目前,导航抽屉图标被隐藏,返回箭头被显示。当我点击返回箭头时,它打开了导航抽屉而不是进入我的switch case。


1
你能发布相关的代码吗?OnClick,它的内容,这些东西。 - user1487189
@Messer 不确定你的意思...通常不会在AB菜单项中使用onClick方法。它们是在onOptionsItemSelected方法中处理的,在其中我有一个switch case android.R.id.home: L.i("home", "home pressed"); break; 所有相关代码都在以上的op中发布了,包括如何设置ab.homeenabled等等...我漏掉了什么吗? - DJ-DOO
好的,从头开始。我假设你在代码中的某个地方调用了mDrawerToggle.syncState();以便首先获得汉堡菜单而不是箭头,对吗? - user1487189
在我的MainActivity中,确保显示抽屉符号 mActionBarDrawerToggle.syncState(); - DJ-DOO
@Messer 正确。我以为我上面包含的代码可以解决问题,但实际上并没有。它显示了返回图标,但仍然执行了 mActionBarToggle 操作。 - DJ-DOO
显示剩余8条评论
3个回答

1

您的问题有两个方面:

  1. 显示主页按钮或返回按钮:

仅显示主页按钮:

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    Drawable homeMenu = getResources().getDrawable(R.drawable.ic_menu_white_24dp);
    getSupportActionBar().setHomeAsUpIndicator(homeMenu);
    getSupportActionBar().setHomeButtonEnabled(true);

显示返回箭头而不是主页:
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
    upArrow.setColorFilter(getResources().getColor(R.color.fab_material_white), PorterDuff.Mode.SRC_ATOP);
    getSupportActionBar().setHomeAsUpIndicator(upArrow);

这只会改变显示的图片。

  1. To change the behaviour of the hamburger icon. In the activity where you want to change the behaviour of the home button, change the onclick of the menu item as shown to onBackPressed():

    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    
留下正常导航抽屉,希望这有所帮助。这是我为我的应用程序所做的方式。
编辑: 删除mMainActivity.mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);,然后继续答案的第二部分执行onBackPressed(),而不是默认的汉堡功能。

在我的问题中,我已经说明了我已经成功地显示了返回箭头并隐藏了导航抽屉图标...问题是它仍然打开并显示导航抽屉。 - DJ-DOO
我觉得你隐藏图标的方式可能不正确。所以,我告诉了你我处理这个问题的方法,并且让它正常工作了。请试一下。 - Ankit Aggarwal
1
是的,但你正在设置自定义图标,我不想这样做...除此之外,我没有看到你和我之间有太大的区别,我的只是显示本机返回箭头。 - DJ-DOO
好的。请阅读答案的第二部分。删除 mMainActivity.mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);,然后通过添加 onBackPressed 来覆盖默认的汉堡包功能。 - Ankit Aggarwal
请提供更明确的问题,以便我准确理解您需要翻译的内容。 - DJ-DOO

0

也许这与问题不太相关,但对某些人可能有帮助。

如果您正在使用NavigationComponent,并且您的startDestination片段不应该出现在NavigationView菜单中,那么在设置AppBarConfiguration时,您需要添加来自导航图的startDestinationid

appBarConfiguration = AppBarConfiguration(setOf(R.id.homeFragment, R.id.menu_1, R.id.menu_2, R.id.menu_3), drawerLayout)

-2

听起来你可能设置了一些不正确的东西。看看这个教程,它可能会帮助你找出你缺少什么。

编辑 这是链接中的第一句话。为了使up按钮工作,您需要在清单文件中设置父活动。

要实现向上导航,第一步是声明每个活动的适当父级是哪个活动。这样做可以让系统方便地处理导航模式,例如向上,因为系统可以从清单文件中确定逻辑父活动。

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

源代码


但这与导航抽屉没有关联。我在项目的其他部分中有这样的导航,在不实现导航抽屉的不同活动中。 - DJ-DOO
这是为了配合查看教程链接的建议而设计的。这只是教程的一部分 - 首先查看教程本身! - C0D3LIC1OU5
我做了,这就是我所说的...教程中没有提到导航抽屉。 - DJ-DOO
好的,已经将第一个链接更新到教程的开头。 - C0D3LIC1OU5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接