Je rencontre un problème avec la bibliothèque de support ViewPager. Ce ViewPager vit à l'intérieur d'un fragment et il est composé de 3 onglets: un qui montrera quelques informations, le second et le troisième affichent une liste d'éléments (ils sont donc tous les deux générés à partir du même fragment). Quand je défile du premier au second, tout fonctionne bien, mais si j'essaie de faire défiler le second vers le troisième, quelque chose arrive aux fragments et ils n'apparaissent plus, même le PagerTabStrip disparaît quand cela arrive. J'ai aussi essayé d'utiliser le même type de fragment pour les 3 onglets (celui qui a disparu avec la liste) et tout semble fonctionner correctement, donc je suis assez embêté à ce sujet. En outre, le seul journal sur la console liée à la question est celle-ci:Android ViewPager n'affiche pas ses fragments correctement
W/FragmentManager: moveToState: état Fragment pour StoreListFragment {3fb980e7 # 2 id = 0x7f0d0080 android: switcher: 2131558528: 2} pas mis à jour en ligne ; état attendu 3 trouvé 2
Voici le code pour mon parent Fragment:
public class StoreFragment extends Fragment {
@Bind(R.id.pager) ViewPager mPager;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_store, container, false);
ButterKnife.bind(this, v);
setupViewPager();
return v;
}
private void setupViewPager() {
String[] titles = {getString(R.string.store_information),
getString(R.string.store_offers),
getString(R.string.store_products)
};
mPager.setAdapter(new StoresPagerAdapter(getChildFragmentManager(), titles));
}
}
Voici le code pour le PagerAdapter:
public class StoresPagerAdapter extends FragmentPagerAdapter {
private String[] mPageTitles;
public StoresPagerAdapter(FragmentManager fm, String[] titles) {
super(fm);
mPageTitles = titles;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return StoreInfoFragment.newInstance();
//return StoreListFragment.newInstance(position);
case 1:
return StoreListFragment.newInstance(position);
case 2:
return StoreListFragment.newInstance(position);
default:
return null;
}
}
@Override
public int getCount() {
return mPageTitles != null ? mPageTitles.length : 0;
}
@Override
public CharSequence getPageTitle(int position) {
return mPageTitles[position];
}
}
Et celui du Fragment:
public class StoreListFragment extends Fragment implements MyListListener {
@Bind(R.id.store_list) RecyclerView mStoreContentView;
private ArrayList<StoreModel> mStoreContents = new ArrayList<>();
public static StoreListFragment newInstance(int page) {
return new StoreListFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mStoreContents.add(new Schedule());
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_store_list, container, false);
ButterKnife.bind(this, v);
return v;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setupList();
}
protected void setupList() {
LinearLayoutManager layoutManager = new LinearLayoutManager(this.getActivity());
mStoreContentView.setHasFixedSize(true);
mStoreContentView.setLayoutManager(layoutManager);
mStoreContentView.setAdapter(new ArrayAdapter(this, mStoreContents, R.layout.list_elem_locations));
}
@Override
public void onClickElement(int elementId, String elementName) {
Intent i = new Intent(this.getActivity(), DetailActivity.class);
startActivity(i);
}
}
peut-être vous pouvez essayer en maintenant trois fragments dans la mémoire par 'mPager.setOffscreenPageLimit (3)' dans votre 'StoreFragment' –
Merci bourgeon, qui fonctionnait vraiment très bien. Pourtant, je suis dérangé par le comportement de RecyclerView. Je pense qu'il me manque toujours quelque chose dans mon code, mais pour l'instant ça va marcher. – TheNewKid
Le message d'avertissement de journal bizarre n'a pas d'importance et a été supprimé dans Support Library v24.0.0 La réponse officielle de développeur est: https://code.google.com/p/android/issues/detail?id=202037 – lejonl