简体   繁体   English

单击工具栏上的汉堡图标不会打开导航抽屉

[英]Clicking hamburger icon on Toolbar does not open Navigation Drawer

I have a simple android.support.v7.widget.Toolbar and all I am trying to do is to open a NavigationDrawer by pressing the "hamburger" icon in the top left corner.我有一个简单的android.support.v7.widget.Toolbar ,我想要做的就是通过按左上角的“汉堡包”图标来打开一个 NavigationDrawer。 The "hamburger" button is visible, and when I start to pull from the left I see the animation on the button but pressing the button does not open/close the NavigationDrawer as I expect. “汉堡包”按钮是可见的,当我开始从左侧拉动时,我看到按钮上的动画,但按下按钮并没有像我预期的那样打开/关闭 NavigationDrawer。 I have followed the [Google Documentation][1] and still am not able to figure this out.我已经按照 [Google 文档][1] 进行了操作,但仍然无法弄清楚这一点。 Sorry for any confusion, below is the simplified code I am currently attempting to use:抱歉有任何混淆,以下是我目前尝试使用的简化代码:

public class MainActivity extends AppCompatActivity implements
    View.OnClickListener,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.activity_main);


    Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);



    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("NICK", "button button button..................");
        }
    });

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
        NavigationView n = (NavigationView) findViewById(R.id.nav);
        mDrawerLayout.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Log.d("NICK", "button button button..................");
            }
        });

        //mDrawerLayout.setDrawerListener(mDrawerToggle);
        n.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                switch (menuItem.getItemId()) {
                    ////.......

                }
                mDrawerLayout.closeDrawers();  // CLOSE DRAWER
                return true;
            }
        });

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    Log.d("NICK","CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO");
    switch (item.getItemId()) {
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);  // OPEN DRAWER
            Log.d("NICK","CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO");
            return true;

    }
           return super.onOptionsItemSelected(item);


}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.drawer, menu);
    return true;
}


}

} }

And as it is I do not get any of the log debug statements when running.事实上,我在运行时没有得到任何日志调试语句。

This is essentially the issue I have: https://stackoverflow.com/a/26636045/1489990 .这基本上是我遇到的问题: https : //stackoverflow.com/a/26636045/1489990 I've followed this and it just doesn't work.我已经遵循了这个,但它不起作用。

It is my understanding that setNavigationOnClickListener is called when the hamburger icon is pressed, and this is where I am focusing my efforts is to get the event handled properly because when I press the button I do not get my log statement.我的理解是setNavigationOnClickListener在按下汉堡包图标时被调用,这是我集中精力正确处理事件的地方,因为当我按下按钮时,我没有得到我的日志语句。 Let me know if this idea is incorrect.如果这个想法不正确,请告诉我。 https://developer.android.com/reference/android/widget/Toolbar.html#setNavigationOnClickListener(android.view.View.OnClickListener) https://developer.android.com/reference/android/widget/Toolbar.html#setNavigationOnClickListener(android.view.View.OnClickListener)

My Layouts:我的布局:

ActivityMain.xml

<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/d"
android:background="@drawable/home_wall">




<android.support.v7.widget.Toolbar
    android:id="@+id/my_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:layout_marginBottom="10dp"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:layout_marginTop="25dp"

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" />



<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:id="@+id/drawer"

    android:layout_height="match_parent"
    android:fitsSystemWindows="true">



    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:id="@+id/imageView"
        android:src="@drawable/trans2"
        android:layout_alignParentTop="true"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:paddingBottom="300dp" />

    <RelativeLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/d8"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/imageView"
        android:layout_alignStart="@+id/imageView"
        android:paddingTop="0dp">

        <Button
            android:layout_width="75dp"
            android:layout_height="50dp"
            android:text="Gallery"
            android:id="@+id/save_button"
            android:background="#dd2c00" android:textColor="#fff"
            android:layout_below="@+id/Purchases"
            android:layout_toRightOf="@+id/start_button"
            android:layout_toEndOf="@+id/start_button" />
        <Button
            android:layout_width="125dp"
            android:layout_height="50dp"
            android:text="Store"
            android:id="@+id/Purchases"
            android:background="#ff6e40" android:textColor="#fff"
            android:layout_above="@+id/instructions_button6"
            android:layout_toLeftOf="@+id/start_button"
            android:layout_toStartOf="@+id/start_button"
            android:layout_marginBottom="98dp" />
        <Button
            android:layout_width="75dp"
            android:layout_height="50dp"
            android:text="Help"
            android:id="@+id/instructions_button6"
            android:background="#dd2c00" android:textColor="#fff"
            android:layout_alignParentBottom="true"
            android:layout_toLeftOf="@+id/start_button"
            android:layout_toStartOf="@+id/start_button"
            android:layout_marginLeft="5dp"
            android:layout_marginBottom="10dp" />
        <Button
            android:layout_width="75dp"
            android:layout_height="300dp"
            android:text="Start"
            android:id="@+id/start_button"
            android:background="#ff3d00"
            android:textColor="#fff"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp" />
        <Button
            android:layout_width="125dp"
            android:layout_height="50dp"
            android:text="Achievements"
            android:id="@+id/Scores"
            android:background="#ff6e40" android:textColor="#fff"
            android:layout_alignTop="@+id/Purchases"
            android:layout_toRightOf="@+id/start_button"
            android:layout_toEndOf="@+id/start_button" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Welcome to the quiz!"
            android:id="@+id/textView"
            android:textColor="#fff"
            android:textSize="20dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="70dp" />


        <!-- sign-in button -->
        <com.google.android.gms.common.SignInButton
            android:id="@+id/sign_in_button"
            android:layout_width="110dp"
            android:layout_height="50dp"
            android:layout_above="@+id/start_button"
            android:layout_centerHorizontal="true"
            android:visibility="visible" />

        <!-- sign-out button -->
        <Button
            android:id="@+id/sign_out_button"
            android:layout_width="125dp"
            android:layout_height="wrap_content"
            android:text="Sign Out"
            android:visibility="invisible"
            android:background="#dd4b39"
            android:textColor="#fff"
            android:layout_alignTop="@+id/sign_in_button"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="160dp" />

    </RelativeLayout>

    <android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#fff"
        android:id="@+id/nav"

        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/drawer"/>
</android.support.v4.widget.DrawerLayout>

Drawer.xml : Drawer.xml :

<menu xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_menu"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:title="Google Play Games"

    android:icon="@drawable/ic_local_airport_white_48dp">
    <menu>
        <item
            android:id="@+id/Sign_in_drawer"

            android:icon="@drawable/games_controller_grey"
            android:title="Sign in" />
        <item
            android:id="@+id/ach"
            android:icon="@drawable/games_achievements"
            android:title="Achievements" />
    </menu>
</item>

<item android:title="Start a Quiz"

   android:icon="@drawable/ic_local_airport_white_48dp">
    <menu>
        <item
            android:id="@+id/quizStart25"

            android:icon="@drawable/ic_local_airport_white_48dp"
            android:title="25 Questions" />
        <item
            android:id="@+id/quizStart10"
            android:icon="@drawable/ic_local_airport_white_48dp"
            android:title="10 Questions" />
    </menu>
</item>

<group
    android:checkableBehavior="single">
    <item
        android:id="@+id/gallery"

        android:icon="@drawable/ic_photo_library_white_48dp"
        android:title="Gallery" />
    <item
        android:id="@+id/stats"
        android:icon="@drawable/ic_toc_white_48dp"
        android:title="Statistics" />
    <item
        android:id="@+id/store"
        android:icon="@drawable/ic_shop_white_48dp"
        android:title="Store" />
    <item
        android:id="@+id/settings"
        android:icon="@drawable/ic_settings_white_48dp"
        android:title="Settings" />
    <item
        android:id="@+id/about"
        android:icon="@drawable/ic_info_white_48dp"
        android:title="About" />

</group>

<item android:title="Support">
    <menu>
        <item
            android:id="@+id/help_drawer"
            android:icon="@drawable/ic_help_white_48dp"
            android:title="Help" />
        <item
            android:id="@+id/report"
            android:icon="@drawable/ic_report_problem_white_48dp"
            android:title="Contact Developer" />
        <item
            android:id="@+id/GPlusCommunity"
            android:icon="@drawable/btn_g_white_normal"
            android:title="Google+ Community" />

    </menu>
</item>

In your ActivityMain.xml, the toolbar is outside of the DrawerLayout.在 ActivityMain.xml 中,工具栏位于 DrawerLayout 之外。 That's the problem.那就是问题所在。 If you want Toolbar to interact with DrawLayout, Toolbar needs to be a child of DrawerLayout .如果您希望 Toolbar 与 DrawLayout 交互,则Toolbar 需要是 DrawerLayout 的子项

To fix the problem, make DrawerLayout the root of your activity.要解决此问题,请将 DrawerLayout 设为 Activity 的根。 Here's the documentation .这是文档 The relevant quote is:相关报价是:

To add a navigation drawer, declare your user interface with a DrawerLayout object as the root view of your layout.要添加导航抽屉,请使用 DrawerLayout 对象声明您的用户界面作为布局的根视图。 Inside the DrawerLayout, add one view that contains the main content for the screen (your primary layout when the drawer is hidden) and another view that contains the contents of the navigation drawer.在 DrawerLayout 中,添加一个包含屏幕主要内容的视图(隐藏抽屉时的主要布局)和另一个包含导航抽屉内容的视图。

So basically, structure your ActivityMain.xml to be something like this:所以基本上,将您的 ActivityMain.xml 构建为如下所示:

<android.support.v4.widget.DrawerLayout ...>

    <RelativeLayout ...>

        <android.support.v7.widget.Toolbar .../>

        <!-- Your other content goes here -->

    </RelativeLayout>

    <android.support.design.widget.NavigationView .../>

</android.support.v4.widget.DrawerLayout>

That should take care of the problem.那应该解决这个问题。

Override onOptionsItemSelected method and use below覆盖onOptionsItemSelected方法并在下面使用

if(item.getItemId() == android.R.id.home){ // use android.R.id
    mDrawerLayout.openDrawer(Gravity.LEFT);
}

You need to sync the drawer toggle:您需要同步抽屉切换:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

EDIT: That code is working for me (copied from your post)编辑:该代码对我有用(从您的帖子中复制)

public class TempActivity extends AppCompatActivity {
    private ActionBarDrawerToggle mDrawerToggle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.temp);
        setupDrawer();
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
    @Override
    public boolean onOptionsItemSelected(final MenuItem item) {
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }
    private void setupDrawer() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.my_drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,toolbar,R.string.drawer_open, R.string.drawer_close) {
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }
}

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <android.support.v7.widget.Toolbar
            android:id="@+id/my_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    <RelativeLayout
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#FFF"
            android:text="DRAMER MENU" />
    </RelativeLayout>
</android.support.v4.widget.DrawerLayout>

But if you are using the new NavigationView , then you don't need the toggle etc. Here is a good example how to use it.但是,如果您使用的是新的NavigationView ,则不需要切换等。 这是一个很好的示例,如何使用它。

If it helps somebody, to me it happened the same because of the stupid error of calling setSupportActionBar(toolbar) two times.如果它对某人有帮助,对我来说它发生了同样的事情,因为调用setSupportActionBar(toolbar)两次的愚蠢错误。 Just call it once in onCreate method and never again.只需在 onCreate 方法中调用一次,以后再也不调用了。 My mistake was I called it later in another method.我的错误是我后来用另一种方法调用了它。

I fixed it by giving openable which is drawerLayout to navigateUp function.我通过将可打开的抽屉布局提供给导航功能来修复它。

More info navigateUp Doc更多信息navigateUp Doc

 override fun onSupportNavigateUp(): Boolean {
    val navController = this.findNavController(R.id.host_fragment)
    return NavigationUI.navigateUp(navController,drawer_layout)
}

Simply call function onOptionsItemSelected(MenuItem menuItem) of ActionBarDrawerToggle class on activity options menu managing function like below.只需在活动选项菜单管理功能上调用 ActionBarDrawerToggle 类的 onOptionsItemSelected(MenuItem menuItem) 函数,如下所示。

mDrawerToggle= new ActionBarDrawerToggle(activity, drawerLayout, R.string.nav_drawer_accessbility_drawer_open,
            R.string.nav_drawer_accessbility_drawer_close);


 @Override
public boolean onOptionsItemSelected(final android.view.MenuItem item) {
    navigation().getOptionsMenuInflater(this).closeSearchView();
    // The action bar home/up action should open or close the drawer.
    // ActionBarDrawerToggle will take care of this behavior.
    mDrawerToggle.onOptionsItemSelected(item);

    return super.onOptionsItemSelected(item);
}

OR或者

override onOptionsItemSelected of activity like below覆盖 onOptionsItemSelected 的活动,如下所示

public boolean onOptionsItemSelected(MenuItem item) {
    if (item != null && item.getItemId() == android.R.id.home) {
        toggle();

    }
    return super.onOptionsItemSelected(item);
}

 private void toggle() {
    if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
        mDrawerLayout.closeDrawer(GravityCompat.START);
    } else {
        mDrawerLayout.openDrawer(GravityCompat.START);
    }
}

对于抽屉切换,您需要将“显示主页向上”设置为 false: getSupportActionBar().setDisplayHomeAsUpEnabled(false);

As i have no specific answer to your problem, i want to suggest a completely different approach:由于我对您的问题没有具体答案,因此我想建议一种完全不同的方法:

In my projects im using the Material Drawer developed by Mike Penz.在我的项目中,我使用了 Mike Penz 开发的Material Drawer Its looks really nice, is easy to implement, and there is not much you have to worry about.它看起来非常好,易于实现,而且您不必担心太多。

So if you cant find a solution for your problem, you could give it a try.因此,如果您找不到解决问题的方法,您可以尝试一下。

Use ActionBarDrawerToggle and implement public boolean onOptionsItemSelected(MenuItem item)使用ActionBarDrawerToggle并实现public boolean onOptionsItemSelected(MenuItem item)

Toolbar DOES NOT have to be within a DrawerLayout, it's not likely to be the cause of this issue.工具栏不必位于 DrawerLayout 内,它不太可能是导致此问题的原因。 toggle.onOptionsItemSelected(item) looks for the ID of the item selected and if it is android.R.id.home then the drawer's visibility is toggled. toggle.onOptionsItemSelected(item)查找所选项目的 ID,如果它是android.R.id.home则切换抽屉的可见性。 Thus Toolbar, or any View that creates a Home MenuItem, can be placed anywhere in your layout.因此,工具栏或任何创建主菜单项的视图都可以放置在布局中的任何位置。

Within your activity:在您的活动中:

ActionBarDrawerToggle toggle;

private void setupDrawerToggleInActionBar() {
    // assuming a Toolbar has been initialized in your onCreate
    this.setSupportActionBar(toolbar);

    // setup the action bar properties that give us a hamburger menu
    ActionBar actionBar = this.getSupportActionBar();
    if(actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }

    // the toggle allows for the simplest of open/close handling
    toggle = new ActionBarDrawerToggle(this,
                                       drawerLayout,
                                       R.string.navigation_drawer_open,
                                       R.string.navigation_drawer_close);
    // drawerListener must be set before syncState is called
    drawerLayout.setDrawerListener(toggle);

    toggle.setDrawerIndicatorEnabled(true);
    toggle.syncState();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    // This is required to make the drawer toggle work
    if(toggle.onOptionsItemSelected(item)) {
        return true;
    }

    /*
     * if you have other menu items in your activity/toolbar 
     * handle them here and return true
     */

    return super.onOptionsItemSelected(item);
}

While accepted answer here works alright however, as they say "Prevention is better than cure".. Adding mDrawerToggle.syncState();虽然这里接受的答案没问题,但正如他们所说的“预防胜于治疗”..添加 mDrawerToggle.syncState(); in onPostCreate and onConfigurationChanged() wroks much better as answerd by @mbmc above:在 onPostCreate 和 onConfigurationChanged() 中效果更好,正如上面@mbmc 所回答的那样:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

After a lot of different problems I found a way to make it work putting Toolbar Widget inside AppBarLayout.在解决了很多不同的问题之后,我找到了一种方法,可以将 Toolbar Widget 放入 AppBarLayout 中。

Be sure that there is no other layout on top of widget toolbar!确保小部件工具栏顶部没有其他布局!

<androidx.drawerlayout.widget.DrawerLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawable_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.appbar.AppBarLayout 
         android:layout_width="match_parent"
          android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        xmlns:android="http://schemas.android.com/apk/res/android">**

          <androidx.appcompat.widget.Toolbar 
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/main_page_toolbar"
          android:layout_width="match_parent" android:layout_height="wrap_content"
          android:background="@color/colorPrimaryDark"
          android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

          </androidx.appcompat.widget.Toolbar>
         </com.google.android.material.appbar.AppBarLayout>**

        .... YOUR LAYOUT ...

    </RelativeLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:layout_marginBottom="3dp"
        app:menu="@menu/navigation_menu">

    </com.google.android.material.navigation.NavigationView>

</androidx.drawerlayout.widget.DrawerLayout>

Idk why...but changing return value to false rather than true fixed the ham Icon for me.不知道为什么......但是将返回值更改为 false 而不是 true 为我修复了火腿图标。 on onOptionItemSelected override method onOptionItemSelected 覆盖方法

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    if(item.getItemId() == R.id.logout){
        ParseUser.logOut();
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(intent);
        Toast.makeText(this, "Logout Successful!", Toast.LENGTH_SHORT).show();
    } else if(item.getItemId() == R.id.action_settings){
        Toast.makeText(this, "No setting to update! Will be available later...", Toast.LENGTH_SHORT).show();
    }
    return true; // here change this to false
}

If none of the above answer works, please cross check again,如果以上答案均无效,请再次交叉检查,

First you need to call setSupportActionBar(toolbar);首先你需要调用 setSupportActionBar(toolbar); and then do the necessary work for nav drawer.然后为导航抽屉做必要的工作。 I wasted my 2 hours because of this silly mistake.由于这个愚蠢的错误,我浪费了我的 2 个小时。

I had the same problem.我有同样的问题。 However, it did not occur on all fragments.然而,它并没有出现在所有片段上。 It occurred on one particular fragment.它发生在一个特定的片段上。

Firstly, please follow @hungryghost 's answer mentioned above.首先,请遵循上面提到的@hungryghost 的回答。 Then do the following.然后执行以下操作。 Adding the following piece of code helped the drawer open on click of the hamburger icon.添加以下代码有助于在单击汉堡包图标时打开抽屉。 It worked flawlessly for me.它对我来说完美无缺。 Thank you very much.非常感谢。 :) My sincere apologies if this isn't the right way. :) 如果这不是正确的方式,我深表歉意。

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        int itemId = item.getItemId();        
        if(itemId == android.R.id.home){
            NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
            return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                    || super.onSupportNavigateUp();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 单击工具栏上的汉堡包图标不会打开导航抽屉 - Clicking hamburger icon on Toolbar does not open Navigation Drawer 单击汉堡图标不会打开导航抽屉 - Clicking Hamburger Icon does not open Navigation Drawer 按下工具栏中的汉堡包图标时,导航抽屉无法打开 - Navigation drawer does not open when pressing the hamburger icon in toolbar 单击汉堡包图标有时无法在android中打开导航抽屉 - Clicking on hamburger icon sometimes does not open navigation drawer in android 点击后导航抽屉上的Android汉堡包图标无响应 - Android hamburger icon on navigation drawer does not respond after clicking 通过单击工具栏上的后退箭头,从子片段返回后,Hamburger Icon无法在父片段上打开导航抽屉 - Hamburger Icon not opening Navigation Drawer on parent fragment after returning from child fragment by clicking back arrow on toolbar 汉堡图标不会显示在导航抽屉片段中 - Hamburger Icon does not show in Navigation Drawer Fragment 在菜单图标上未打开导航抽屉,在工具栏上单击 - Navigation drawer not open on menu icon click on toolbar 导航抽屉主页图标不会恢复为汉堡图标 - Navigation drawer home icon does not restore to hamburger icon android - 点击应用图标打开导航抽屉? - android - open navigation drawer by clicking the app icon?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM