У меня проблема с ViewPager + FragmentPageAdapter.
Сценарий: У меня есть одно действие внутри фрагмента А. Фрагмент A имеет ViewPager с фрагментом B1 e Fragment B2. B1 e B2 - это один и тот же класс, но разные данные в качестве аргумента.
Проблема: Все работает хорошо во время создания. Но когда приложение переходит в фоновом режиме, и процесс убит андроидом, пытаясь восстановить последнее состояние, снова добавив приложение, фрагмент B1 e B2 не отображается на переднем плане, а фрагмент A -. Что-то странно, так это то, что Fragment B1 e B2 является внутренним элементом Fragment A ChildFragmentManager, и они возобновляются, потому что вызывается onStart() и onResume() (видится в журнале). Кроме того, пейджер возобновляется с двумя страницами, но пустым или лучше, при этом ничего не видно.
Если я хорошо понимаю, как работает FragmentPagerAdapter, его ответственность должна заключаться в том, чтобы управлять своими собственными фрагментами и как их воссоздавать. Кроме того, чтобы обеспечить соблюдение этой точки, FragmentPagerAdapter не вызывает getItem (int position) при возврате из фона, если уже существует фрагмент в этой позиции с указанным тегом.
... так почему я не вижу Фрагмент B1 e B2, но только пейджер пуст?
это мой пример кода.
FragmentaSTRONG >
@Override
public void onStart() {
super.onStart();
populateViewPager();
}
private void populateViewPager() {
pager.setAdapter(new MyFragmentPageAdapter(getChildFragmentManager()));
indicator.setViewPager(pager);
indicator.notifyDataSetChanged();
}
FragmentPagerAdapter
public class MyFragmentPageAdapter extends FragmentPagerAdapter {
public MyFragmentPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return FragmentB.newInstance(position);
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
String title = "";
if (position == 0)
title = "Fragment B1";
else if (position == 1)
title = "Fragment B2";
return title;
}
}
Фрагмент B
public static FragmentB newInstance(int position) {
FragmentB f = new FragmentB();
Bundle b = new Bundle();
b.putInt(POSITION_IN_PAGER_ARGUMENT, position);
f.setArguments(b);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Log.d(TAG, "onCreateView");
View root = inflater.inflate(R.layout.fragment_b_layout, container, false);
empty = (TextView) root.findViewById(R.id.empty);
list = (ListView) root.findViewById(R.id.list);
return root;
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
populateListView(loadData());
}
@Override
public void onStop() {
super.onStop();
}
}