2016-06-06 2 views
0

У меня есть 1 Activity и 3 fragments они FirstFragment, SecondFragment & ThirdFragment соответственно.загружать несколько фрагментов и добавить его в backstack андроида

FirstFragment загружается автоматически, когда MainActivity открыт. SecondFragment Загрузка по кнопке FirstFragment с addToBackStack флаг. То же самое происходит с ThirdFragment.

Теперь, предположим, что пользователь закрывает приложение, когда SecondFragment отображает на своем экране, чем когда пользователь открывает приложение снова, он должен напрямую перейти к SecondFragment (внутренне FirstFragment нагрузок, чем SecondFragment нагрузок с addToBacStack флагом).

Как достичь этого?

Вот код. В настоящее время я не могу загрузить несколько фрагментов.

SharePreferences для текущего отображения fragment.

public class PrefsMain { 

    public static final String TAG = Prefs.class.getSimpleName(); 

    // Strings contains Fragment names BEGIN 
    public static final String CurrentFragment_RoleSelectionFragment = 
      RoleSelectionFragment.TAG; 
    public static final String CurrentFragment_CheckInOutFragment = 
      CheckInOutFragment.TAG; 
    public static final String CurrentFragment_TeacherRegFragment = 
      TeacherRegFragment.TAG; 
    public static final String CurrentFragment_StudentSelectionFragment = 
      StudentSelectionFragment.TAG; 
    public static final String CurrentFragment_StudentFragment = 
      StudentFragment.TAG; 
    public static final String CurrentFragment_StudentRegistrationFragment = 
      StudentRegistrationFragment.TAG; 
    public static final String CurrentFragment_DiagnoseFragment = 
      DiagnoseFragment.TAG; 
    // Strings contains Fragment names END 

    // SharedPreferences KEY 
    private static final String CurrentFragment = "Fragment"; 

    private SharedPreferences mPrefs; 

    public PrefsMain(Context context) { 
     mPrefs = context.getSharedPreferences(TAG, Context.MODE_PRIVATE); 
    } 

    // Getter - Setter 
    public String getCurrentFragment() { 
     return mPrefs.getString(CurrentFragment, CurrentFragment_RoleSelectionFragment); 
    } 

    public void setCurrentFragment(String currentFragment) { 
     mPrefs.edit().putString(CurrentFragment, currentFragment).apply(); 
    } 
} 

MainAvtivity.java

import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_CheckInOutFragment; 
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_DiagnoseFragment; 
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_RoleSelectionFragment; 
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_StudentFragment; 
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_StudentRegistrationFragment; 
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_StudentSelectionFragment; 
import static com.odoo.addons.employees.utils.PrefsMain.CurrentFragment_TeacherRegFragment; 

public class MainActivity extends AppCompatActivity { 

    public static final String TAG = MainActivity.class.getSimpleName(); 

    private PrefsMain mPrefsMain; 
    private AppCompatActivity mActivity; 

    private RoleSelectionFragment mRoleSelectionFragment; 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mActivity = this; 
     mPrefsMain = new PrefsMain(this); 
    } 

    @Override 
    protected void onPostCreate(@Nullable Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 

     // simply get the fragment name from `SharedPreferences`. 
     // and loads it 
     final String currentFragment = mPrefsMain.getCurrentFragment(); 
     if (currentFragment.equals(CurrentFragment_RoleSelectionFragment)) { 
      loadFragment(RoleSelectionFragment.newInstance(), 
          RoleSelectionFragment.TAG); 
     } else if (currentFragment.equals(CurrentFragment_CheckInOutFragment)) { 
      loadFragment(CheckInOutFragment.newInstance(), 
          CheckInOutFragment.TAG); 
     } else if (currentFragment.equals(CurrentFragment_TeacherRegFragment)) { 
      loadFragment(TeacherRegFragment.newInstance(), 
          TeacherRegFragment.TAG); 
     } else if (currentFragment.equals(CurrentFragment_StudentSelectionFragment)) { 
      loadFragment(StudentSelectionFragment.newInstance(), 
          StudentSelectionFragment.TAG); 
     } else if (currentFragment.equals(CurrentFragment_StudentFragment)) { 
      loadFragment(StudentFragment.newInstance(), 
          StudentFragment.TAG); 
     } else if (currentFragment.equals(CurrentFragment_StudentRegistrationFragment)) { 
      loadFragment(StudentRegistrationFragment.newInstance(), 
          StudentRegistrationFragment.TAG); 
     } else if (currentFragment.equals(CurrentFragment_DiagnoseFragment)) { 
      loadFragment(DiagnoseFragment.newInstance(), 
          DiagnoseFragment.TAG); 
     } 
    } 

    public void loadFragment(Fragment fragment, String TAG) { 
     getSupportFragmentManager() 
       .beginTransaction() 
       .replace(R.id.flMain, fragment, TAG) 
       .commit(); 
    } 
} 

Над реализацией просто загружает последний известный fragment, но он не выполняет addToBackStack для своего родителя fragments.

Любые предложения или помощь будут оценены. Заранее спасибо.

+0

попробуйте добавить андроид: alwaysRetainTaskState = «истина» в деятельности тег MainActivity в манифесте –

+0

Что вы имеете в виду тесного приложения ... Убейте его и вернуться снова? –

ответ

1

Вы не добавляете транзакцию в заднюю часть. Добавьте транзакцию в backstack.

public void loadFragment(Fragment fragment, String TAG) { 
    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.flMain, fragment, TAG) 
      .addToBackStack(TAG) 
      .commit(); 
} 
Смежные вопросы