导航抽屉刷新

Navigation Drawer Refreshed

我正在关注 SO 上的 答案,标题为:

用户登录时更改 NavigationView 项目

代码工作正常,但 NavigationView 的内容在我重新启动应用程序时发生变化。我希望在点击登录或注销后更改内容item menus

这是我在 onCreate() 方法中的代码:

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

        if(islogin())
        {
            navigationView.getMenu().clear();
            navigationView.inflateMenu(R.menu.activity_main_drawer1);
        } else
        {
            navigationView.getMenu().clear();
            navigationView.inflateMenu(R.menu.activity_main_drawer2);
        }
        navigationView.setNavigationItemSelectedListener(this);
        toggle.syncState();

这里是 islogin() 方法:

    public boolean islogin(){
// Retrieve data from preference:
        prefs = getSharedPreferences("UserLoginData", MODE_PRIVATE);
        String username = prefs.getString("username",   null);
        if (username == null) {
            return false;
        }
        else{
            return true;
        }
    }

如有任何帮助,我们将不胜感激!谢谢

注意:虽然这个问题看起来有些重复,但只是标题,内容完全不同。

虽然我没有得到答案,但我在这里发布了我的解决方案。 我确实用一个非常简单的逻辑解决了它,而且效果非常好。

第 1 步:

我先在class上面全局初始化Toolbar toolbar;

第 2 步:

然后我只创建一个名为:myDrawer() 的简单方法并将我所有的 Drawer 代码包装在其中。像这样:

public void myDrawer(){

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

    if(islogin())
    {
        navigationView.getMenu().clear();
        navigationView.inflateMenu(R.menu.activity_main_drawer2);
    } else
    {
        navigationView.getMenu().clear();
        navigationView.inflateMenu(R.menu.activity_main_drawer);
    }
    navigationView.setNavigationItemSelectedListener(this);
    toggle.syncState();

}

现在我已经交出了导航,我可以用它做任何事情,比如刷新和再次调用等

第 3 步:

我正在调用 Main Activity 中的方法,即:OnCreate

myDrawer();

第 4 步:

我每次做 SigninSignOut 的逻辑时都会调用它。

哇!它就像一个魅力。

PS: 仅供参考,这是我的 onNavigationItemSelected,我可以在其中处理点击事件:

public boolean onNavigationItemSelected(MenuItem item) {

        int id = item.getItemId();
        Intent intent;
        if (id == R.id.nav_item_item1) {

            intent = new Intent(MainActivity.this, SomeClass1.class);
            startActivity(intent);

        } else if (id == R.id.nav_item_item2) {
            intent = new Intent(getApplicationContext(), SomeClass2.class);
            startActivity(intent);

        } else if (id == R.id.nav_item_logout) {
            // my other logic for signout
               myDrawer();

        } 

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

学分: