Ana görünümde farklı parçaları açan alt kısımda sekmeler bulunan bir parça arayüzüne sahibim.
Öğe listesi olan belirli bir parçam var. Kullanıcı bu listedeki öğelerden birini seçerse, önceki parçadaki listedeki tüm öğeler arasında yatay olarak kayan bir görüntüleyici içeren başka bir parça açılır. Bu harika çalışıyor.
Viewpager, öğeleri görüntülemek için FragmentPagerAdapter kullanır.
Sorun, kullanıcı listedeki bir öğeyi seçip görüntülediğinde, listeye geri dönmek için sekme çubuğundaki düğmeye bastığında ve ardından başka bir öğe seçtiğinde ortaya çıkar. Bir öğe ikinci kez seçildiğinde, görüntüleyici yerine boş bir ekran belirir. Bu olduğunda LogCat'imde hiçbir hata almıyorum.
Görüntüleyici neden yalnızca ilk kez görünüyor?
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);
}
}