Laci Navigasi Disegarkan

Saya mengikuti jawaban ini di SO, yang berjudul:

Ubah item NavigationView saat pengguna login

Kode berfungsi dengan baik tetapi konten NavigationView berubah ketika saya memulai ulang aplikasi. Saya ingin isinya diubah setelah saya klik Login atau Logout item menus

Ini kode saya dalam metode 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();

dan inilah metode 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;
        }
    }

Bantuan apa pun akan sangat dihargai! Terima kasih

Catatan: Meskipun beberapa pertanyaan ini tampak duplikat, tetapi hanya judulnya, isinya sama sekali berbeda.


person fWd82    schedule 24.08.2016    source sumber


Jawaban (1)


Meskipun saya tidak mendapatkan jawaban, saya memposting solusi saya di sini. Saya menyelesaikannya dengan logika yang sangat sederhana dan berfungsi dengan sangat baik.

Langkah 1:

Saya pertama kali menginisialisasi Toolbar toolbar; secara global di atas kelas.

Langkah 2:

Lalu saya membuat metode sederhana bernama: myDrawer() dan membungkus semua kode Laci saya di dalamnya. Seperti ini:

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();

}

Sekarang saya memiliki Navigasi dan saya dapat melakukan apa saja dengannya, Seperti Menyegarkan dan Menelepon lagi, dll.

Langkah 3:

Saya memanggil metode di Aktivitas Utama yaitu: OnCreate

myDrawer();

Langkah 4:

Dan saya memanggilnya setiap kali saya melakukan logika Signin dan SignOut.

Wow! Ini bekerja dengan sangat baik.

PS: Sekadar info, Inilah onNavigationItemSelected saya, tempat saya dapat menangani Acara Klik:

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

Kredit:

Pengguna: manish jain Jawaban

person fWd82    schedule 27.09.2016