5

AsyncTaskLoaderカスタム データ ソースに実装したい:

public class DataSource {
    public interface DataSourceObserver {
        void onDataChanged();
    }
    ...
}

DataSource登録されたオブザーバーのリストを保持し、変更について通知します。CustomLoaderを実施しDataSourceObserverます。問題は、UI スレッドから呼び出す必要があるため、適切に通知する方法ですが、私の場合、CustomLoader操作(およびへの呼び出し) はバックグラウンド スレッドから行われます。Loader.onContentChanged()DataSourceDataSourceObserver.onDataChanged()

Selvin のヒントからのアイデアで更新:

public class CustomLoader extends AsyncTaskLoader<...> implements DataSource.DataSourceObserver {
    private final Handler observerHandler;

    public CustomLoader(Context context) {
        super(context);
        observerHandler = new Handler()
    }

    @Override
    public void onDataChanged() {
        observerHandler.post(new Runnable() {
            @Override
            public void run() {
                onContentChanged();
            }
        });
    }
}
4

1 に答える 1