我正在使用加载器,ActionBarSherlock和SqliteCursorLoader在片段中进行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();
}
});
}
这是Loader代码:
@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);
}
答案 0 :(得分:2)
您需要使用YourActivityClassName.this
而不是this
(这是View.OnClickListener类实例)才能引用Activity的实例。