FragmentStatePagerAdapter复制Fragment的CursorLoader结果

时间:2018-04-09 14:14:46

标签: android android-viewpager android-cursorloader fragmentstatepageradapter

我正在制作一个简单的新闻申请。

其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;
    }

0 个答案:

没有答案