รีเฟรชลิ้นชักการนำทางแล้ว

ฉันกำลังติดตามคำตอบนี้ใน 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:

ฉันกำลังเรียกเมธอดใน Main Activity เช่น OnCreate

myDrawer();

ขั้นตอนที่ 4:

และฉันจะเรียกมันทุกครั้งที่ฉันทำตรรกะของ Signin และ SignOut

ว้าว! มันทำงานเหมือนมีเสน่ห์

ป.ล.: เพื่อวัตถุประสงค์ในการให้ข้อมูล นี่คือ 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