8

RecyclerViewgreenrobot eventbusを使用してSyncAdapterいます。同期が終了し たら、メッセージ バスにメッセージを投稿します。SyncAdapter

EventBus.getDefault().post(new EventMessagesRefreshed());

私のターゲットクラスでは、次のことを行います。

@Subscribe
public void onEvent(EventMessagesRefreshed event) {
    this.init();
}

そして、私init()はrecyclerview用のアダプターを作成して設定します:

public void init() {
    if(this.listRowParent != null) {
        this.adapter = new FragmentMessagesListAdapter(this.getActivity(), SingletonMessages.getInstance().getMessages());
        this.listRowParent.setAdapter(this.adapter);
    }
}

// listRowParent is my RecyclerView!

イベントを受け取るフラグメントは、タブ ビューの内部にあります。したがって、複数のタブがあり、もちろん、正しいターゲットタブにないときにメッセージバスにSyncAdapter投稿することもありますが、登録されているため、アダプターを呼び出して作成し、に設定しようとします。その場合、次のエラーが発生します。EventMessagesRefreshedinit()RecyclerView

Could not dispatch event: class EventMessagesRefreshed to subscribing class class FragmentMessagesList
java.lang.IllegalStateException: Observer android.support.v7.widget.RecyclerView$RecyclerViewDataObserver@2c3421a7 was not registered.
    at android.database.Observable.unregisterObserver(Observable.java:69)
    at android.support.v7.widget.RecyclerView$Adapter.unregisterAdapterDataObserver(RecyclerView.java:5688)
    at android.support.v7.widget.RecyclerView.setAdapterInternal(RecyclerView.java:873)
    at android.support.v7.widget.RecyclerView.setAdapter(RecyclerView.java:857)

したがって、アダプターが登録されている場合にのみinit()、アダプターが必要です。RecyclerViewRecyclerViewDataObserver

どうやってやるの?

4

1 に答える 1