Rumah  >  Soal Jawab  >  teks badan

java - EventBus在普通对象里如何调用unregister()?

场景:在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)呢?

PHPzPHPz2764 hari yang lalu553

membalas semua(1)saya akan balas

  • 怪我咯

    怪我咯2017-04-18 09:51:23

    Tiada cara untuk melihat secara langsung status ListView dalam ListAdapter yang sepadan dengan ListView Terdapat sepasang kaedah public void onAttachedToRecyclerView(RecyclerView recyclerView) dan public void onDetachedFromRecyclerView(RecyclerView recyclerView) dalam RecyclerView.Adapter untuk mencapai keperluan anda.
    Tetapi cadangan saya adalah untuk mendaftar dan menyahdaftar Pengendali Acara di mana BroadcastAdapter dibina (biasanya Aktiviti atau Fragmen).

    Jawapan tambahan

    Menurut poster asal, saya ingin merangkum sepenuhnya perkara yang berkaitan dengan EventBus dalam BroadcastAdapter Kewujudan EventBus tidak sepatutnya dilihat oleh dunia luar, kerana ini benar-benar perkara BroadcastAdapter dan tidak ada kaitan dengannya. pengguna BroadcastAdapter, iaituDecoupling.
    Pertama sekali, bilakah masa yang sesuai untuk menghubungi mendaftar dan menyahdaftar EventBus? Jawapan saya ialah apabila anda memerlukan atau tidak memerlukan pemprosesan acara (karut...), secara amnya tempat yang biasa kami gunakan ialah onCreate, onDestory (atau onResume, onPause, dalam kes poster asal, ia sepatutnya BroadcastAdapter). . Dan apabila tidak digunakan.
    Sekarang saya menganggap bahawa Adapter poster ialah RecyclerView.Adapter yang diwarisi public void onAttachedToRecyclerView(RecyclerView recyclerView) dan public void onDetachedFromRecyclerView(RecyclerView recyclerView) yang disebut sebelum ini ialah kaedah yang akan dipanggil semula apabila Adapter mengaitkan dan tidak dikaitkan dengan RecyclerView. Penyesuai dianggap sebagai Penyesuai berguna hanya apabila ia ditugaskan kepada RecyclerView, jadi saya rasa onAttachedToRecyclerView dan onDetachedFromRecyclerView sepadan dengan apabila BroadcastAdapter digunakan dan apabila ia tidak digunakan . Walau bagaimanapun, terdapat masalah. Saya melihat kod sumber Android dan mendapati bahawa onDetachedFromRecyclerView hanya dipanggil apabila menggantikan Penyesuai lain, jadi anda harus setAdapter(null) apabila tidak menggunakan RecyclerView.


    Sebenarnya, selepas berkata begitu banyak, ia bukan jawapan yang saya mahu berikan - -|||, saya rasa reka bentuk poster itu kurang. Penyesuai harus melakukan tugasnya dengan teliti (menyesuaikan data kepada Paparan), dan Paparan tersuai juga harus memaparkan paparannya secara senyap-senyap. Rancangan reka bentuk saya adalah untuk meletakkan pemprosesan acara dalam Activity atau Fragment Apabila paparan perlu dikemas kini semasa pemprosesan acara (kadangkala pemprosesan acara bukan sahaja perlu mengemas kini paparan, tetapi mungkin juga perlu mengemas kini data, dsb., ini diletakkan dalam View dan Adapter jelas tidak sesuai), View menyediakan beberapa antara muka yang boleh mengemas kini paparan. Dengan cara ini, Activity bertanggungjawab untuk pemprosesan acara dan memainkan peranan sebagai Pengawal, manakala View hanya bertanggungjawab untuk pandangannya, saya rasa ini adalah menyahgandingan. Salah satu prinsip reka bentuk berorientasikan objek ialah Prinsip Tanggungjawab Tunggal.

    balas
    0
  • Batalbalas