J'ai une interface de fragment avec des onglets en bas qui ouvrent différents fragments dans la vue principale.
J'ai un fragment particulier qui est une liste d'articles. Si l'utilisateur sélectionne l'un des éléments de cette liste, un autre fragment s'ouvre et contient un visualiseur qui défile horizontalement entre tous les éléments de la liste dans le fragment précédent. Cela fonctionne très bien.
Le visualiseur utilise un FragmentPagerAdapter pour afficher les éléments.
Le problème survient lorsque l'utilisateur sélectionne un élément dans la liste, l'affiche, puis appuie sur le bouton de la barre d'onglets pour revenir à la liste, puis sélectionne un autre élément. La deuxième fois qu'un élément est sélectionné, un écran vide apparaît à la place du visualiseur. Je ne reçois aucune erreur dans mon LogCat lorsque cela se produit.
Pourquoi le visualiseur n'apparaît-il que la première fois?
FragmentPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter {
Cursor mCursor;
public ViewPagerAdapter(FragmentManager fm, Cursor c) {
super(fm);
mCursor = c;
}
public void changeCursor(Cursor c) {
mCursor = c;
this.notifyDataSetChanged();
}
@Override
public int getCount() {
if (mCursor == null) return 0;
else return mCursor.getCount();
}
@Override
public Fragment getItem(int position) {
mCursor.moveToPosition(position);
return TeamCardFragment.newInstance(mCursor, position);
}
}
PagerFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle bundle = getArguments();
mCursorPosition = bundle.getInt(TeamCardCommon.BUNDLE_KEY_CURSOR_POSITION);
View mView = inflater.inflate(R.layout.team_card_master, container, false);
mViewPager = (ViewPager)mView.findViewById(R.id.team_card_master_view_pager);
mAdapter = new ViewPagerAdapter(getFragmentManager(), cursor);
new setAdapterTask().execute();
return mView;
}
private class setAdapterTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(mCursorPosition);
}
}