2012-04-29 30 views
9

Khi tôi bắt đầu một bộ nạp con trỏ vớiLấy args Bundle trong callback onLoadFinished CursorLoader

Bundle bundle = new Bundle(); 
bundle.putInt("arg", 123); 
getLoaderManager().restartLoader(0, bundle, this); 

Tôi muốn nhận được bó trong

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

Nhưng điều này dường như chỉ có thể từ onCreateLoader (.. .)

Cách khắc phục duy nhất tôi có thể nghĩ đến là phân lớp CursorLoader và thêm một số trường để lưu dữ liệu trong suốt quá trình tải lên onLoadFinished (...)

Cảm ơn!

Trả lời

0

Vì bạn đang sử dụng 'this' làm tham số thứ ba của onLoadFinished, tôi cho rằng lớp đang triển khai giao diện LoaderManager.LoaderCallbacks. Vì vậy, không cần tham số, bạn có thể sử dụng trường thành viên riêng tư.

1

Tôi sẽ không chỉ sử dụng trường thành viên riêng trong lớp triển khai LoaderCallbacks vì bạn không bao giờ biết chính xác trình tải nào đang hoàn tất. Tốt hơn để làm như người hỏi đề nghị và lưu trữ dữ liệu với bộ nạp. Dưới đây là cách tôi thực hiện:

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 

    // ... 
} 
Các vấn đề liên quan