Tengo una interfaz de fragmentos con pestañas en la parte inferior que abren diferentes fragmentos en la vista principal.
Tengo un fragmento particular que es una lista de elementos. Si el usuario selecciona uno de los elementos de esta lista, se abre otro fragmento que contiene un visor que se desplaza horizontalmente entre todos los elementos de la lista del fragmento anterior. Esto funciona muy bien.
El visor usa un FragmentPagerAdapter para mostrar los elementos.
El problema surge cuando el usuario selecciona un elemento de la lista, lo ve, luego presiona el botón en la barra de pestañas para volver a la lista y luego selecciona otro elemento. La segunda vez que se selecciona un elemento, aparece una pantalla en blanco en lugar del visor. No recibo ningún error en mi LogCat cuando esto sucede.
¿Por qué el visor solo aparece la primera vez?
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);
}
}