Ich habe eine Fragmentoberfläche mit Registerkarten am unteren Rand, die verschiedene Fragmente in der Hauptansicht öffnen.
Ich habe ein bestimmtes Fragment, das eine Liste von Elementen ist. Wenn der Benutzer eines der Elemente in dieser Liste auswählt, wird ein weiteres Fragment geöffnet, das einen Viewpager enthält, der horizontal zwischen allen Elementen in der Liste im vorherigen Fragment scrollt. Das funktioniert super.
Der Viewpager verwendet einen FragmentPagerAdapter, um die Elemente anzuzeigen.
Das Problem tritt auf, wenn der Benutzer ein Element in der Liste auswählt, es anzeigt, dann auf die Schaltfläche in der Registerkartenleiste klickt, um zur Liste zurückzukehren, und dann ein anderes Element auswählt. Bei der zweiten Auswahl eines Elements wird anstelle des Viewpagers ein leerer Bildschirm angezeigt. In diesem Fall erhalte ich keine Fehler in meinem LogCat.
Warum wird der Viewpager nur beim ersten Mal angezeigt?
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);
}
}