林與RecyclerView
,SyncAdapter
和greenrobot eventbus 工作時我SyncAdapter
完成syincing我發佈一條消息到消息總線:RecyclerView RecyclerViewDataObserver未註冊
EventBus.getDefault().post(new EventMessagesRefreshed());
在我的目標類別i執行以下操作:
@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!
接收該事件的片段是內部的標籤視圖的。因此,有多個標籤,有時ofcourse的SyncAdapter
職位EventMessagesRefreshed
到消息總線時,不正確的目標選項卡,但因爲它是註冊它試圖調用init()
和創建適配器,並將其設置爲RecyclerView
IM。如果出現這種情況,我得到以下錯誤:
Could not dispatch event: class EventMessagesRefreshed to subscribing class class FragmentMessagesList
java.lang.IllegalStateException: Observer [email protected]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()
我的適配器,只有當RecyclerViewDataObserver
註冊RecyclerView
。
我怎樣才能做到這一點?
我們應該利用這個後註銷後? – Majid
是的,你應該。 https://stackoverflow.com/questions/10864853/when-exactly-is-it-leak-safe-to-use-anonymous-inner-classes – crgarridos