DrawerLayout 没有关闭抽屉

DrawerLayout did not close the drawers

这里我做了一个 DrawerBase activity 让我所有的 Activity 有相同的 DrawerLayout,但是当我这样做的时候,一些无聊的事情发生了,当我开始一个新的 Intent 到开始新的 Activity 没有关上抽屉。

这是我的代码,希望有人能帮助我。

    package cn.rezero.utool;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;

import cn.rezero.utool.Note.NotelistActivity;

/**
 * Created by ReZero on 2017/4/5.
 */

public class DrawerBase extends AppCompatActivity {

    protected DrawerLayout mDrawerLayout;

    protected NavigationView navigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        navigationView = (NavigationView) findViewById(R.id.nav_view);

        navigationView.setCheckedItem(R.id.nav_moment);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()){
                    case R.id.nav_lbs:
                        startActivity(new Intent(DrawerBase.this, BmapActivity.class));
                        mDrawerLayout.closeDrawers();
                        break;
                    case R.id.nav_note:
                        startActivity(new Intent(DrawerBase.this, NotelistActivity.class));
                        mDrawerLayout.closeDrawers();
                        break;
                    case R.id.nav_web:
                        startActivity(new Intent(DrawerBase.this, BrowserActivity.class));
                        mDrawerLayout.closeDrawers();
                    default:
                }

                return true;
            }
        });


    }

}





this a test demo :

    public class MainActivity extends DrawerBase {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}

使用这个:

mDrawerLayout.closeDrawer(GravityCompat.START);

从你的抽屉布局中删除这一行...

setContentView(R.layout.activity_main);

并像这样覆盖 setContentView

@Override
public void setContentView(int layoutResID) {
    DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.activity_base, null);
    FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content);
    getLayoutInflater().inflate(layoutResID, activityContainer, true);
    super.setContentView(fullView);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    setTitle("Activity Title");
}

替换

startActivity(new Intent(DrawerBase.this, BmapActivity.class));
mDrawerLayout.closeDrawers();

mDrawerLayout.closeDrawer(GravityCompat.START);
startActivity(new Intent(this, BmapActivity.class));
return true;

你可以从这里看到完整的实现Adding a Toolbar and Navigation Drawer Across all Activities of an Android App

使用这个方法

/**
 * Close Navigation Drawer
 */
private void closeNavMenu() {
    if (mDrawerLayout != null && mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
        mDrawerLayout.closeDrawer(GravityCompat.START);
    }
}

你就试试这个

 mDrawerLayout.closeDrawer(GravityCompat.START);

您需要使用

if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
mDrawerLayout.closeDrawer(GravityCompat.START); 
}

而不是

mDrawerLayout.closeDrawers();