我正在制作一个简单的新闻申请。
其MainActivity包含一个 ViewPager,其中包含TabLayout,用于存储新闻类别的不同片段。
前两个类别是商业(第一)体育(第二)。
问题是即使使用了不同的加载程序,这两个片段的内容也相同,即“商家”标签显示体育新闻。
但是当您滑动第3个片段时,问题就会得到解决。 (可能是因为ViewPager重新加载了第一个片段。)
该片段已实现了Cursor Loader回调
public class ArticleListFragment extends Fragment implements
LoaderManager.LoaderCallbacks<Cursor>
在Fragment的#onCreate
中,我称之为Loader:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
Bundle bundle = getArguments();
loader_id = bundle.getInt("id");
category = bundle.getString("category");
getLoaderManager().initLoader(loader_id, null, this);
}
Fragment的加载程序回调如下:
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
if(cursorLoader.getId() == loader_id){
if(cursor != null && cursor.getCount() > 0) {
Log.i("haha","id: " + cursorLoader.getId());
adapter.swapCursor(cursor);
}
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
MyPagerAdapter
具有getItem()
的以下实现:
@Override
public Fragment getItem(int position) {
ArticleListFragment fragment = ArticleListFragment.newInstance();
Bundle bundle = new Bundle();
bundle.putString("category", categories.get(position));
bundle.putInt("id",position);
fragment.setArguments(bundle);
return fragment;
}