【问题标题】:Navigation Drawer Refreshed导航抽屉已刷新
【发布时间】:2016-08-24 18:53:41
【问题描述】:

我正在关注this 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;
        }
    }

任何帮助将不胜感激!谢谢你

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

【问题讨论】:

    标签: android navigation-drawer android-sharedpreferences


    【解决方案1】:

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

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

    我在 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;
        }
    

    致谢:

    User: manish jain Answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2015-08-21
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多