2012-04-29 1 views
9

にバンドル引数を取得する私は私は</p> <pre><code>Bundle bundle = new Bundle(); bundle.putInt("arg", 123); getLoaderManager().restartLoader(0, bundle, this); </code></pre> <p>でカーソルローダーを起動するとonLoadFinished CursorLoaderコールバック

public void onLoadFinished(Loader<Cursor> loader, Cursor data) 

にバンドルを取得したい。しかし、これは唯一のonCreateLoader(から可能と思われます。.. 。)

私が考えることができる唯一の回避策は、CursorLoaderをサブクラス化し、onLoadFinished(...)にロードしてデータを保持するいくつかのフィールドを追加することです。

ありがとうございます!

答えて

0

onLoadFinishedの3番目のパラメータとして 'this'を使用しているので、クラスがLoaderManager.LoaderCallbacksインターフェイスを実装していると仮定します。したがって、パラメータは必要ありません。プライベートメンバーフィールドを使用できます。

1

LoaderCallbacksを実装しているクラスでプライベートメンバーフィールドを使用するのは、どのローダが終了しているのかわからないからです。 Askerがローダーでデータを提案して保存するときに行うのがよい。ここで私はそれを行う方法です:

public static class CursorWithData<D> extends CursorWrapper { 
    private final D mData; 

    public CursorWithData(Cursor cursor, D data) { 
    super(cursor); 
    mData = data; 
    } 

    public D getData() { 
    return mData; 
    } 
} 

@Override 
public Loader<Cursor> onCreateLoader(int id, final Bundle bundle) { 
    // ... 

    return new CursorLoader(getActivity(), uri, projection, selection, args, order) { 
    @Override 
    public Cursor loadInBackground() { 
     return new CursorWithData<Bundle>(super.loadInBackground(), bundle); 
    } 
    }; 
} 

@Override 
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) { 
    CursorWithData<Bundle> cursorWithData = (CursorWithData<Bundle>) cursor; 
    Bundle args = cursorWithData.getData(); 
    cursor = cursorWithData.getWrappedCursor(); // Optional if you are worried about performance 

    // ... 
} 
関連する問題

 関連する問題