FragmentPagerAdapter实现LoaderManager.LoaderCallbacks <cursor> </cursor>

时间:2013-02-26 08:33:24

标签: android android-loadermanager fragmentpageradapter

我试图用游标加载器实现FragmentPagerAdapter。但是,似乎我无法访问getItem()中的游标,因为我在尝试访问游标时遇到空引用错误,因为它尚未在onLoadFinished()中设置。

onLoadFinished()完成之前,getItem()是否会完成?

有没有更好的加载游标数据的方法?我可以直接查询ContentProvider并将结果存储在我的光标中,但认为首选的是加载程序。

public class MyAdapter extends FragmentPagerAdapter implements LoaderManager.LoaderCallbacks<Cursor>{

private Cursor cursor;


public MyAdapter(FragmentManager fm) {
    super(fm);
    getLoaderManager().initLoader(0, null, this);

}

@Override
public int getCount() {
    return 13;
}

@Override
public Fragment getItem(int position) {


    Bundle args = new Bundle();


    cursor.moveToPosition(position);
    args.putString(TextViewFragment.TITLE, cursor.getString(1));
    args.putInt(TextViewFragment.POSITION_KEY, position);
    return TextViewFragment.newInstance(args);

}

@Override
public CharSequence getPageTitle(int position) {
    return "Fragment # " + position;
}

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
    // TODO Auto-generated method stub

    CursorLoader cursorLoader = new CursorLoader(getActivity(), TestContentProvider.CONTENT_URI, null, null, null, null);
    return cursorLoader;
}

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
    // TODO Auto-generated method stub
    cursor = arg1;
    //throw new IllegalArgumentException("We are HEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHEREHERE");
}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    // TODO Auto-generated method stub
}

}

}

1 个答案:

答案 0 :(得分:1)

您是否尝试将加载器放入片段而不是适配器中,并且可能是激活它的方法。 尝试在活动中运行加载器并使用FragmentStatePageAdapter(类似于列表适配器)而不是FragmentPagerAdapter更新ViewPager适配器。