Панель навигации обновлена

Я следую этому ответу на 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;
        }
    }

Любая помощь будет принята с благодарностью! Благодарю вас

Примечание. Хотя этот вопрос кажется дублирующим некоторые, но это просто заголовок, содержание совершенно другое.


person fWd82    schedule 24.08.2016    source источник


Ответы (1)


Хотя я не получил ответа, я публикую свое решение здесь. Я решил это очень простой логикой, и она работает очень хорошо.

Шаг 1:

Сначала я инициализирую 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.

Я вызываю метод в основном действии, т.е.: OnCreate

myDrawer();

Шаг 4:

И я вызываю его каждый раз, когда делаю логику Signin и SignOut.

Ух ты! Это работает как шарм.

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

Кредиты:

Пользователь: manish jain Ответ

person fWd82    schedule 27.09.2016