1

ローダー、ActionBarSherlock、および SqliteCursorLoader を使用して、フラグメントで ListView を実行しています。ListView は、基本的に日付と GPS 座標のリストを表示します。最初の ListView を問題なくロードできます。ボタンをクリックすると ListView をリロードして、時間を前後に移動し、関連データを表示できるようにしたいと考えています。

私の問題は、適切な場所で restartLoader() を呼び出してはならないということです。「this」を 3 番目のパラメーターとして使用して呼び出そうとすると、Eclipse でコンパイル エラーが発生します。「これ」はView型であり、LoaderCallbacks型である必要があると言っています。3 番目のパラメーターを取得するにはどうすればよいですか? getSherlockActivity().getSupportLoaderManager().getLoader(LOADER_ID) のすべてのバリエーションを使用しようとし、LoaderCallbacks にキャストしようとしましたが、うまくいきませんでした。

ローダーを使用するのはこれが初めての試みです。

ここに私の 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);

}
4

1 に答える 1

2

アクティビティのインスタンスを参照するには、(View.OnClickListener クラスのインスタンスである)YourActivityClassName.thisではなくを使用する必要があります。this

于 2013-05-01T19:58:18.480 に答える