Android 使用ActionBarSherlock和SQLiteCursorLoader在ListView片段中调用restartLoader的位置

Android 使用ActionBarSherlock和SQLiteCursorLoader在ListView片段中调用restartLoader的位置,android,sqlite,android-cursor,Android,Sqlite,Android Cursor,我正在使用加载程序、ActionBarSherlock和SqliteCursorLoader在片段中创建ListView。ListView主要显示日期和GPS坐标的列表。我可以加载初始列表视图。我希望能够在单击按钮后重新加载ListView,以便及时向前和向后移动并显示相关数据 我的问题是我不能在正确的位置调用restartLoader(),当我尝试使用“this”作为第三个参数调用它时,Eclipse给了我一个编译错误。这意味着“this”是View类型,并且它需要是LoaderCallbac

我正在使用加载程序、ActionBarSherlock和SqliteCursorLoader在片段中创建ListView。ListView主要显示日期和GPS坐标的列表。我可以加载初始列表视图。我希望能够在单击按钮后重新加载ListView,以便及时向前和向后移动并显示相关数据

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

这是我第一次尝试使用加载程序

以下是我创建的OnActivity:

@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);

}
@覆盖
公共加载器onCreateLoader(int arg0,Bundle arg1){
loader=新的SQLiteCursorLoader(getActivity().getApplicationContext(),myDbHelper,
myDbHelper.getSQLArrayOfDatesDistances(BaseYear,BaseMonth),空;
返回装载机;
}
@凌驾
public void onLoadFinished(加载器arg0,光标){
adapter.changeCursor(游标);
}
@凌驾
公共void onLoaderReset(加载程序arg0){
adapter.changeCursor(null);
}

您需要使用
您的ActivityClassName。this
而不是
this
(这是View.OnClickListener类实例)来引用活动的实例。

这不起作用,尽管我调用了getSherlockActivity(),但它仍然显示编译错误.@KristyWelsh-您的类中实现LoaderCallbacks的是什么?如果是你的片段,你需要使用
FragmentClassName。这
-关键是
监听器内部是监听器,而不是实际控制加载的片段/活动。