मेरे पास नीचे के साथ टैब के साथ एक खंड इंटरफ़ेस है जो मुख्य दृश्य में अलग-अलग टुकड़े खोलते हैं।
मेरे पास एक विशेष टुकड़ा है जो वस्तुओं की एक सूची है। यदि उपयोगकर्ता इस सूची में से किसी एक आइटम का चयन करता है, तो एक और टुकड़ा खुलता है जिसमें एक व्यूपाइज़र होता है जो पिछली टुकड़े में सूची में सभी वस्तुओं के बीच क्षैतिज रूप से स्क्रॉल करता है। यह बहुत अच्छा काम करता है।
व्यूपेजर आइटम दिखाने के लिए एक FragmentPagerAdapter का उपयोग करता है।
समस्या तब आती है जब उपयोगकर्ता सूची में किसी आइटम का चयन करता है, उसे देखता है, फिर सूची पर वापस जाने के लिए टैब बार पर बटन दबाता है, फिर किसी अन्य आइटम का चयन करता है। दूसरी बार जब कोई आइटम चुना जाता है, तो दृश्यदर्शी के बजाय एक रिक्त स्क्रीन दिखाई देती है। ऐसा होने पर मुझे मेरे LogCat में कोई त्रुटि नहीं मिलती है।
दृश्यदर्शी केवल पहली बार क्यों दिखाई दे रहा है?
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);
}
}