0

我有一個抽屜式導航欄設置其上的菜單項點擊將取代在菜單被選擇哪個新片段的片段容器:的Android添加新的/不同的片段返回堆棧

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     switch (id) { 
      case R.id.nav_new: 
       if (subInfo.isEmpty()){ 
        addFragment(new NewFragment(), id); 
       } else { 
        addFragment(new SubjectInfoFragment(), id); 
       } 
       break; 
      case R.id.nav_start: 
       addFragment(new StartFragment(), id); 
       break; 
      case R.id.nav_save: 
       addFragment(new SaveFragment(), id); 
       break; 
      case R.id.nav_raw: 
       addFragment(new RawFragment(), id); 
       break; 
      case R.id.nav_accelerometer: 
       addFragment(new AccelerometerFragment(), id); 
       break; 
      case R.id.nav_accelerometerWorld: 
       addFragment(new AccelerometerWorldFragment(), id); 
       break; 
      case R.id.nav_gyroscope: 
       addFragment(new GyroscopeFragment(), id); 
       break; 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

而且該方法加入的片段:

public void addFragment(Fragment fragment, int id) { 
     if (fragment != null) { 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

      if (fragmentManager.getFragments() == null) { 
       fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) 
         .commit(); 
      } else { 
       fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) 
         .addToBackStack(Integer.toString(id)) 
         .commit(); 
      } 
     } 
    } 

以我片段之一(NewFragment())有一個數據插入件的形式,該菜單項的ID nav_new。當點擊提交按鈕時,addFragment方法被調用將用戶定向到我的應用程序的另一個片段(StartFragment()):

mainActivity.addFragment(new StartFragment(), R.id.nav_new); 

然而,上述將數據插入表單添加到堆棧中。一旦用戶提交了表單,我不希望他們能夠按回去提交表單。相反,我想引導他們到另一個片段(SubjectInfoFragment()),其中包含他們輸入的信息的摘要

我設計了我的onNavigationItemSelected方法來支持這一點。當點擊nav_new菜單項時,它會檢查用戶是否已輸入任何信息。如果他們沒有,那麼一個交易發生,將他們帶到NewFragment輸入表單信息。如果他們有,SubjectInfoFragment顯示,而不是顯示其先前輸入的信息的摘要

我要引導他們到StartFragment的形式提交,但隨後的舊形式片段被添加到堆棧中,這是不希望的

表單提交後,我如何處理片段交易,使後退按鈕將他們帶到一個全新的片段(SubjectInfoFragment),而不是將它們帶回到表單提交頁面?

或者在最糟糕的情況下,如果我不能在後臺添加一個全新的片段,我怎樣才能至少防止用戶按下表單提交頁面?

回答

0

你應該使用下面的行添加片段堆棧中:

getFragmentManager.addToBackStack(tag or null); 
+0

不包括在調用'addToBackStack'不會阻止片段被添加到後退堆棧雖然消息... – Simon

+0

你想做什麼?你想添加片段到後臺或不? –

+0

不,我想我很清楚地指出了我想要的問題。我想將另一個片段添加到backstack而不是我目前使用的那個。這樣用戶不能按回退按鈕返回到表單提交片段,而是會看到摘要片段 – Simon