1

當前使用谷歌導航抽屜,用戶後壓時有一些問題。谷歌導航抽屜,處理後臺設置正確的選中迭代

  1. 當用戶backpress,他們沒有當我點擊應用程序更新菜單項目
  2. 例。順序是A> B> C> B> C,如果我後退我想成爲C> B> A。我該如何編碼?

我的代碼

public class MainActivity extends AppCompatActivity { 

    private String appTitle; 
    private Toolbar toolbar; 
    private NavigationView navigationView; 
    private DrawerLayout drawerLayout; 
    private TextView toolbarTitle; 
    private Fragment fragment; 
    private FragmentManager fragmentManager; 
    private Title title; 
    private MenuItem menuItem2; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Actionbar 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); 
     toolbarTitle.setTextColor(Color.parseColor("#FFFFFF")); 
     setTitle(""); 

     fragmentManager = getSupportFragmentManager(); 
     fragment= new HomeFragment(); 
     title = new Title(getApplicationContext()); 
     fragmentManager.beginTransaction().replace(R.id.content_frame,fragment , title.getStrHome()).commit(); 

     navigationView = (NavigationView) findViewById(R.id.navigation_view); 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       menuItem2 = menuItem; 

       menuItem.setChecked(true); 
       drawerLayout.closeDrawers(); 

       if (menuItem.getItemId() == R.id.nav_home) { 
        fragment = new HomeFragment(); 
        appTitle = title.getStrHome(); 
       } else if ((menuItem.getItemId() == R.id.nav_direction)) { 
        fragment = new DirectionFragment(); 
        appTitle = title.getStrDirection(); 
       } else if ((menuItem.getItemId() == R.id.nav_more)) { 
        fragment = new MoreFragment(); 
        appTitle = title.getStrMore(); 
       } else if((menuItem.getItemId()==R.id.nav_directory)){ 
        fragment = new DirectoryFragment(); 
        appTitle = title.getStrDirectory(); 
       } 
       else { 
        Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show(); 
       } 
       replaceFragment(fragment,appTitle); 

       return true; 
      } 
     }); 

     drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
     ActionBarDrawerToggle actionBarDrawerToggle = 
    new ActionBarDrawerToggle 
     (this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close){ 
      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
      } 
     }; 


     drawerLayout.setDrawerListener(actionBarDrawerToggle); 
     actionBarDrawerToggle.syncState(); 

    } 



    public void onBackPressed() { 
     if(drawerLayout.isDrawerOpen(GravityCompat.START)){ 
      drawerLayout.closeDrawer(GravityCompat.START); 
     } 
     else { 
      if (fragmentManager.getBackStackEntryCount() > 0){ 
       fragmentManager.popBackStack(); 
       toolbarTitle.setText(appTitle); 
       menuItem2.setChecked(true); 


      } else { 
       finish(); 
      } 
     } 

    } 
    public void replaceFragment(Fragment fragment, String tag){ 
     toolbarTitle.setText(tag); 
     FragmentTransaction ft = fragmentManager.beginTransaction().replace(R.id.content_frame, fragment, tag); 
     ft.addToBackStack(tag); 

     ft.commit(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 




} 

回答

0

由於Android上的官方頁面上註明tasks and back stack你可以看到如何使用您的意向標誌的FLAG_ACTIVITY_CLEAR_TOP完成你想要的行爲。這張照片很好地證明了這一點。

你經常後退按鈕收益爲:

enter image description here

當你指定這個標誌,你會得到一個行爲像你需要


編輯:

官方文件說明:

FLAG_ACTIVITY_CLEAR_TOP

如果正在啓動的活動已經在當前任務運行,則代替開展該活動的一個新的實例,都在它上面的 等活動被破壞

這意味着,您的不同活動將不會有重複,並且您將擁有一個乾淨的Back Stack。

在你的例子中A>B>C>B>C將不可能。相反,它將是A>B>C,因爲BC已經存在於堆棧中,它們不會被添加,而是被替換。

+0

對不起,我還是不太明白這是什麼意思。 – beginnerK

+0

我已經更新了我的答案 – LilaQ

0

研究Android活動啓動模式。

here是明確的解釋可用。 只要看看。