Tôi có một giao diện phân mảnh với các tab ở phía dưới mở các phân mảnh khác nhau trong chế độ xem chính.
Tôi có một phân đoạn cụ thể là danh sách các mục. Nếu người dùng chọn một trong các mục trong danh sách này, thì một phân đoạn khác sẽ mở ra, trong đó có một khung nhìn sẽ cuộn theo chiều ngang giữa tất cả các mục trong danh sách trong phân đoạn trước đó. Điều này hoạt động tuyệt vời.
Viewpager sử dụng FragmentPagerAdapter để hiển thị các mục.
Vấn đề xảy ra khi người dùng chọn một mục trong danh sách, xem nó, sau đó nhấn nút trên thanh tab để quay lại danh sách, sau đó chọn một mục khác. Lần thứ hai một mục được chọn, một màn hình trống sẽ xuất hiện thay vì máy ngắm. Tôi không nhận được lỗi nào trong LogCat của mình khi điều này xảy ra.
Tại sao viewpager chỉ xuất hiện lần đầu tiên?
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);
}
}