java - EventBus在普通对象里如何调用unregister()?
PHPz
PHPz 2017-04-18 09:49:23
0
1
517

场景:在Android里,有一个Adapter,Activity里用Eventbus来post数据到这个adapter里。

问题:我可以在Adapter的构造方法里调用register()方法:

public BroadcastAdapter(Context context) {
    mContext = context;
    EventBus.getDefault().register(this);
    Log.d(TAG, "constructor");
}

但我要在哪里调用EventBus.getDefault().unregister(this)呢?

PHPz
PHPz

学习是最好的投资!

全員に返信(1)
刘奇

ListView に対応する ListAdapter で ListView のステータスを直接認識する方法はありません。RecyclerView.Adapter には、ニーズを実現するためのメソッド public void onAttachedToRecyclerView(RecyclerView recyclerView)public void onDetachedFromRecyclerView(RecyclerView recyclerView) があります。
しかし、私の提案は、BroadcastAdapter が構築されるイベント ハンドラー (通常はアクティビティまたはフラグメント) を登録および登録解除することです。

補足回答

元の投稿者によると、EventBus 関連のものを BroadcastAdapter に完全にカプセル化したいと考えています。EventBus の存在は外部から認識されるべきではありません。これは完全に BroadcastAdapter のものであり、 BroadcastAdapter のユーザー、つまりデカップリング
まず、EventBus の register および unregister を呼び出すのに適切なタイミングはいつですか?私の答えは、イベント処理が必要な場合と必要ない場合です (ナンセンス...)。一般的によく使用される場所は、onCreate、onDestory (または onResume、onPause) です。投稿者の場合、それは BroadcastAdapter である必要があります。そして、使用しないとき
ここでは、投稿者のアダプターが継承された RecyclerView.Adapter であると仮定します。前述の public void onAttachedToRecyclerView(RecyclerView recyclerView)public void onDetachedFromRecyclerView(RecyclerView recyclerView) は、アダプターが RecyclerView に関連付けられるとき、または関連付けが解除されるときに呼び出されるメソッドです。 Adaptor は、RecyclerView に割り当てられて初めて有用なアダプターとみなされます。そのため、onAttachedToRecyclerViewonDetachedFromRecyclerView は、BroadcastAdapter を使用する場合の と使用しない場合の に相当すると思います。ただし、問題があり、Android のソース コードを確認したところ、onDetachedFromRecyclerView は他のアダプタを置き換える場合にのみ呼び出されるため、RecyclerView を使用しない場合は setAdapter(null) する必要があります。


実は、ここまで言っても、私が言いたい答えではありません - -|||、ポスターのデザインが足りないと思います。アダプターはその仕事 (データをビューに適合させる) を誠実に実行する必要があり、カスタム ビューもそのビューを静かに表示する必要があります。私の設計計画は、イベント処理中にビューを更新する必要がある場合に、イベント処理を Activity または Fragment に配置することです (イベント処理ではビューを更新するだけでなく、データなども更新する必要がある場合があります)。これは View に配置されており、Adapter は明らかに不適切です)、View はビューを更新できるいくつかのインターフェイスを提供します。このように、Activity はイベント処理を担当し、Controller の役割を果たしますが、View は単純にそのビューを担当するのが 分離 だと思います。オブジェクト指向設計原則の 1 つは、単一責任原則 です。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!