【发布时间】:2013-11-25 19:48:37
【问题描述】:
编辑:看起来 ViewPager 没有反映底层适配器的变化 - swapCursor() 被正确调用,但 getItem() 从未被调用。我在 SO 上找到了similar problem 的解决方案,但对我来说没有帮助。 编辑 2 和解决方案:感谢 this answer 我发现我正在向 CalendarPageAdapter 提供 FragmentManager 而不是 ChildrenFragmentManager。
我有 SherlockFragmentActivity,它拥有一个 ViewPager。相同的活动实现了 LoaderCallbacks,它在 onLoadFinished() 中刷新了 myAdapter。
我将此活动移至 Fragment - 因此它扩展了 SherlockFragment 并仍实现 LoaderCallbacks,但交换光标停止工作。在 onLoadFinished() 中,游标中提供了正确的数据,但没有交换任何内容。我没有更改适配器中的任何内容,也没有更改寻呼机填充的片段。哪里有问题?
我的新片段如下:
public class MyFragment extends SherlockFragment implements LoaderCallbacks<Cursor> {
private CalendarPageAdapter myAdapter;
private ViewPager viewPager;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
myAdapter = new CalendarPageAdapter(getChildFragmentManager()); // <- EDIT 2
viewPager = (ViewPager) view.findViewById(R.id.pager);
viewPager.setAdapter(myAdapter);
return view;
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}
. . . .
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
myAdapter.swapCursor(data);
viewPager.setCurrentItem(data.getCount()); // skip to last column
printoutCursorContent(); // prints out correct cursor content
}
}
我的适配器很简单,就像这样:
public class CalendarPageAdapter extends FragmentStatePagerAdapter {
private Cursor cursor;
public CalendarPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
cursor.moveToPosition(position);
int calendarId = cursor.getInt(cursor.getColumnIndex(CalendarTable.COLUMN_ID));
return DayFragment.newInstance(calendarId);
}
@Override
public int getCount() {
if (cursor == null)
return 0;
else
return cursor.getCount();
}
public void swapCursor(Cursor c) {
if (cursor == c)
return;
cursor = c;
notifyDataSetChanged();
}
public Cursor getCursor() {
return cursor;
}
}
【问题讨论】:
标签: android android-fragments actionbarsherlock