ฉันมีอินเทอร์เฟซแฟรกเมนต์พร้อมแท็บที่ด้านล่างซึ่งเปิดส่วนต่างๆในมุมมองหลัก
ฉันมีส่วนหนึ่งโดยเฉพาะซึ่งเป็นรายการของรายการ หากผู้ใช้เลือกรายการใดรายการหนึ่งในรายการนี้ส่วนอื่นจะเปิดขึ้นซึ่งมี viewpager ซึ่งเลื่อนตามแนวนอนระหว่างรายการทั้งหมดในรายการในส่วนก่อนหน้า ใช้งานได้ดี
viewpager ใช้ FragmentPagerAdapter เพื่อแสดงรายการ
ปัญหาเกิดขึ้นเมื่อผู้ใช้เลือกรายการในรายการดูรายการจากนั้นกดปุ่มบนแถบแท็บเพื่อกลับไปที่รายการจากนั้นเลือกรายการอื่น ครั้งที่สองที่เลือกรายการหน้าจอว่างจะปรากฏขึ้นแทน viewpager ฉันไม่ได้รับข้อผิดพลาดใน LogCat ของฉันเมื่อสิ่งนี้เกิดขึ้น
เหตุใด viewpager จึงปรากฏในครั้งแรกเท่านั้น
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);
}
}