Ho un'interfaccia dei frammenti con schede lungo la parte inferiore che aprono diversi frammenti nella vista principale.
Ho un frammento particolare che è un elenco di elementi. Se l'utente seleziona uno degli elementi in questo elenco, si apre un altro frammento che contiene un viewpager che scorre orizzontalmente tra tutti gli elementi nell'elenco nel frammento precedente. Funziona alla grande.
Il viewpager usa un FragmentPagerAdapter per visualizzare gli elementi.
Il problema si verifica quando l'utente seleziona un elemento nell'elenco, lo visualizza, quindi preme il pulsante sulla barra delle schede per tornare all'elenco, quindi seleziona un altro elemento. La seconda volta che viene selezionato un elemento, al posto del viewpager appare una schermata vuota. Quando ciò accade, non ricevo errori nel mio LogCat.
Perché il viewpager appare solo la prima volta?
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);
}
}