RecyclerView
とgreenrobot 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
投稿することもありますが、登録されているため、アダプターを呼び出して作成し、に設定しようとします。その場合、次のエラーが発生します。EventMessagesRefreshed
init()
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()
、アダプターが必要です。RecyclerView
RecyclerViewDataObserver
どうやってやるの?