android - 使用 ActionBarSherlock 和 SQLite CursorLoader 在 ListView fragment 中调用 restartLoader 的位置

标签 android sqlite android-cursor

我正在使用加载器、ActionBarSherlock 和 SqliteCursorLoader 在 fragment 中创建一个 ListView。 ListView 主要显示日期和 GPS 坐标的列表。我可以很好地加载初始 ListView。我希望能够在单击按钮时重新加载 ListView,以便及时前进和后退并显示相关数据。

我的问题是我不能在正确的地方调用 restartLoader(),当我尝试使用“this”作为第三个参数调用它时,Eclipse 给我一个编译错误。它是说“this”是 View 类型,它需要是 LoaderCallbacks 类型。如何获取第三个参数?我尝试使用 getSherlockActivity().getSupportLoaderManager().getLoader(LOADER_ID) 的所有变体并尝试转换为 LoaderCallbacks 但没有成功。

这是我第一次尝试使用 Loader。

这是我的 onActivityCreated:

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    super.onActivityCreated(savedInstanceState);
    gps = new GPSTracker(getActivity());
    mGPSDC = new GPSDateCoordinates();
    Log.d(TAG, "onActivityCreated");
    CalcDate();
    //enables buttons for next and previous months
    GetPreviousFollowingMonths();
    adapter= new SimpleCursorAdapter(getActivity(), R.layout.row, null, new String[] {
            myDbHelper.COLUMN_DISTANCE, myDbHelper.COLUMN_FORMATTEDSTART }, 
            new int[] { R.id.title, R.id.value },0);
    lvReports.setAdapter(adapter);

    btnDate.setText(getMonth(BaseMonth) + " " + String.valueOf(BaseYear));
    getSherlockActivity().getSupportLoaderManager().initLoader(LOADER_ID, null, this);


    // show next month's data
    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
                getSherlockActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null, this);
                getSherlockActivity().getSupportLoaderManager().getLoader(LOADER_ID).forceLoad();


        }
    });

} 

这是加载器代码:

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {

    loader = new SQLiteCursorLoader(getActivity().getApplicationContext(), myDbHelper,
            myDbHelper.getSQLArrayOfDatesDistances(BaseYear,BaseMonth),null);
    return loader;

}

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
    adapter.changeCursor(cursor);

}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    adapter.changeCursor(null);

}

最佳答案

您需要使用 YourActivityClassName.this 而不是 this(它是 View.OnClickListener 类实例)来引用 Activity 的实例。

关于android - 使用 ActionBarSherlock 和 SQLite CursorLoader 在 ListView fragment 中调用 restartLoader 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325392/

相关文章:

android - 我们可以在 sqlite 数据库中打开多少游标?

Android License Server 检查总是超时

Android改变FAB的颜色

c# - 从 Sqlite 数据库中读取以二进制形式存储的 Guid

sql - 在 SQLite 中混合属性和聚合函数

android - SQLite删除级联不起作用

android - 如何从uri获取视频文件路径

android - 无法解析 : com. android.support :appcompat-v7:30. 0.0

android - 膨胀设置 TextView.TextColor 的布局时崩溃

android-studio - Android Studio : Cursor changing itself to overwrite mode