2015-12-12 22 views
6

Tôi có một ứng dụng Android có NavigationView với 4 đoạn. Tôi có thể điều hướng giữa các đoạn thông qua menu điều hướng và khi tôi chọn một đoạn khác, tôi đã thêm đoạn trước đó vào ngăn xếp lại để cung cấp chức năng nút quay lại.Chọn lại đúng mục menu NavigationView sau khi nhấn nút quay lại

Vấn đề của tôi là khi tôi nhấn nút quay lại để đi đến đoạn trước đó, NavigationView vẫn hiển thị đoạn cũ như đoạn đã chọn. Nếu có thể, tôi muốn cập nhật tùy chọn đã chọn làm đoạn trên màn hình.

Ví dụ:
Tôi bắt đầu từ A và chọn B từ NavigationView. Màn hình hiện tại là B và NavigationView hiển thị mục đã chọn là B. Nếu tôi nhấn nút quay lại màn hình hiện tại của tôi sẽ trở thành A một lần nữa nhưng NavigationView hiển thị B là mục đã chọn.

Đây là phương pháp onNavigationItemSelected tôi:

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 
     HomeFragment fragment = null; 
     Class type = null; 
     switch (id) { 
      case R.id.nav_home: 
       type = HomeNavigationFragment.class; 
       break; 
      case R.id.nav_groups: 
       type = GroupsNavigationFragment.class; 
       break; 
      case R.id.nav_profile: 
       type = ProfileNavigationFragment.class; 
       break; 
      case R.id.nav_messages: 
       type = MessageNavigationFragment.class; 
       break; 
     } 
     fragment = HomeFragment.newInstance(mUser, type); 
     FragmentManager manager = getSupportFragmentManager(); 
     manager.beginTransaction().replace(R.id.fragment_container, fragment).addToBackStack("fragment" + code++).commit(); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

Cảm ơn.

Trả lời

9

Tôi cố định vấn đề của tôi với trọng onBackPressed như thế này:

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     FragmentManager manager = getSupportFragmentManager(); 
     if(manager.getBackStackEntryCount() > 0) { 
      super.onBackPressed(); 
      HomeFragment currentFragment = (HomeFragment) manager.findFragmentById(R.id.fragment_container); 
      if(currentFragment instanceof HomeNavigationFragment){ 
       mNavigationView.getMenu().getItem(0).setChecked(true); 
      } 
      else if(currentFragment instanceof GroupsNavigationFragment){ 
       mNavigationView.getMenu().getItem(2).setChecked(true); 
      } 
      else if(currentFragment instanceof ProfileNavigationFragment){ 
       mNavigationView.getMenu().getItem(1).setChecked(true); 
      } 
      else if(currentFragment instanceof MessageNavigationFragment){ 
       mNavigationView.getMenu().getItem(3).setChecked(true); 
      } 
     } 
    } 

} 
+0

Nice và ngắn :-) – ahmadalibaloch

Các vấn đề liên quan