导航抽屉刷新

时间:2016-08-24 18:53:41

标签: android android-navigation-drawer android-sharedpreferences

我正在关注SO的this回答,标题为:

在用户登录时更改NavigationView项目

代码工作正常但重启应用时NavigationView的内容发生了变化。我希望在单击Login或LogOut 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 个答案:

答案 0 :(得分:0)

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

第1步:

我首先在全球范围内初始化Toolbar toolbar;

第2步:

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

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步:

我在主要活动i-e中调用该方法: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;
    }

<强>现金:

User: manish jain Answer