기본보기에서 다른 조각을 여는 하단에 탭이있는 조각 인터페이스가 있습니다.
항목 목록 인 특정 조각이 하나 있습니다. 사용자가이 목록의 항목 중 하나를 선택하면 이전 조각의 목록에있는 모든 항목 사이를 가로로 스크롤하는 뷰 페이저가 포함 된 다른 조각이 열립니다. 이것은 훌륭하게 작동합니다.
뷰 페이저는 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);
}
}