Сценарий: Активность A открывает активность B, активность B имеет два фрагмента a и b в viewpager, используя FragmentPagerAdapter, фрагменты a и b имеют некоторые переключатели и флажки, где пользователь взаимодействует;Сохранение состояний фрагментов viewpager Активность после перехода к предыдущему действию
Мне нужно хранить кнопки и флажки статусы в фрагментах, даже если я оставил активность B к A
Мои попытки: 1- удалены super.onBack() нажата, чтобы заставить систему в вызываемую onSavedInstanceState в но все равно не удалось сохранить фрагменты в нем, как экземпляр их в адаптере и не знаю, как получить тот же объект, созданный из них, для активности.
2- проверено onSaveInstanceState(), onViewStateRestored() в каждом фрагмент и onSavedInstance никогда не вызывались с использованием setRetainInstance (true) в oncreate(); затем принудительно вызывает onSaveInstanceState(), вызвав его onPause()
I Прочитайте большинство доступных решений в стеке и не работало, мой код выглядит следующим образом:
public class FilterPagerAdapter extends FragmentPagerAdapter {
public final static int KEYWORDS_TAB = 0;
public final static int AREAS_TAB = 1;
private int tabCount;
private Context context;
public FilterPagerAdapter(FragmentManager fm, int tabCount, Context context) {
super(fm);
this.tabCount = tabCount;
this.context = context;
}
@Override
public Fragment getItem(int position) {
Fragment fragment;
switch (position) {
case KEYWORDS_TAB:
fragment = KeyWordsFragment.newInstance();
break;
case AREAS_TAB:
fragment = AreasFragment.newInstance();
break;
default:
return null;
}
return fragment;
}
@Override
public int getCount() {
return tabCount;
}
@Override
public CharSequence getPageTitle(int position) {
String tabTitle = "";
switch (position) {
case KEYWORDS_TAB:
tabTitle = context.getResources().getString(R.string.tab_keywords);
break;
case AREAS_TAB:
tabTitle = context.getResources().getString(R.string.tab_area);
break;
default:
}
return tabTitle;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filters);
ButterKnife.bind(this);
mAreas = new Areas();
mKeywords = new KeyWords();
viewControllers();
}
private void viewControllers() {
tabLayout.addTab(tabLayout.newTab().setText(R.string.tab_keywords), CATEGORIES_TAB);
tabLayout.addTab(tabLayout.newTab().setText(R.string.tab_area), BRANDS_TAB);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.addOnTabSelectedListener(this);
filterPagerAdapter = new FilterPagerAdapter(getSupportFragmentManager(),
tabLayout.getTabCount(), this);
viewPager.setAdapter(filterPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
@Override
public void onBackPressed() {
startActivity(new Intent(FiltersActivity.this, BranchesActivity.class));
}
@Override
public void onStop() {
super.onStop();
tabLayout.removeOnTabSelectedListener(this);
}
}
Прежде всего Brilliant иллюстративного ответ, во-вторых, я думаю, третий метод подходит для моего случая, я буду реализовывать его и получить вернуться к вам –