Как сохранить состояние фрагмента в навигационном ящике

Я использую библиотеку ящика google навигации по следующей ссылке... https://github.com/Arasthel/GoogleNavigationDrawerMenu

См. Следующий код:

mDrawer.setOnNavigationSectionSelected(new GoogleNavigationDrawer.OnNavigationSectionSelected() {
 @Override
 public void onSectionSelected(View v, int i, long l) {
 Fragment fragment = null;
 switch (i) {
 case 0:
 // fragment = new HomeFragment();
 break;
 case 1:
 fragment = new NewsFragment();

 break;
 case 2:
 fragment = new TransferFragment();
 break;
 case 3:
 fragment = new BlogsFragment();
 break;
 case 4:
 fragment = new FixturesFragment();
 break;
 case 5:
 fragment = new BestXIFragment();
 break;
 case 6:
 fragment = new FeedFragment();

 break;

 default:
 break;
 }
 if (fragment != null) {
 FragmentManager fragmentManager = getFragmentManager();
 fragmentManager.beginTransaction()
 .replace(R.id.main, fragment).commit();

 } else {
 // error in creating fragment
 Log.e("MainActivity", "Error in creating fragment");
 }
 }
 });

Мои фрагменты используют async-задачу, и всякий раз, когда я переключаюсь между этими фрагментами, задача async снова загружается.

Итак, как я могу сохранить состояние фрагмента?

1 ответ

Вместо создания нового фрагмента каждый раз, когда вы можете хранить массив фрагментов и просто возвращать один и тот же объект:

mDrawer.setOnNavigationSectionSelected(new GoogleNavigationDrawer.OnNavigationSectionSelected() {

Fragment[] fragments ={new HomeFragment(),new NewsFragment(), new TransferFragment(), new BlogsFragment(),new FixturesFragment() , new BestXIFragment(),new FeedFragment()};
 @Override

 public void onSectionSelected(View v, int i, long l) {

 if (fragment[i] != null) {
 FragmentManager fragmentManager = getFragmentManager();
 fragmentManager.beginTransaction()
 .replace(R.id.main, fragments[i]).commit();

 } else {
 // error in creating fragment
 Log.e("MainActivity", "Error in creating fragment");
 }
 }
});

licensed under cc by-sa 3.0 with attribution.