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

场景:在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가 생성되는 이벤트 핸들러(보통 Activity 또는 Fragment)를 등록하고 등록 취소하는 것입니다.

보충답변

원래 포스터에 따르면 EventBus와 관련된 사항을 BroadcastAdapter에 완전히 캡슐화하고 싶습니다. BroadcastAdapter 사용자, 즉 디커플링입니다.
먼저 EventBus 등록 및 등록 취소를 호출하는 적절한 시점은 언제인가요? 내 대답은 이벤트 처리가 필요하거나 필요하지 않을 때(말도 안 되는 일...)입니다. 일반적으로 우리가 일반적으로 사용하는 장소는 onCreate, onDestory(또는 onResume, onPause)입니다. 원본 포스터의 경우 BroadcastAdapter여야 합니다. . 그리고 사용하지 않을 때는.
이제 포스터의 어댑터가 상속된 RecyclerView.Adapter라고 가정합니다. 앞서 언급한 public void onAttachedToRecyclerView(RecyclerView recyclerView)public void onDetachedFromRecyclerView(RecyclerView recyclerView)는 어댑터가 RecyclerView와 연결 및 연결 해제될 때 다시 호출되는 메서드입니다. Adapter는 RecyclerView에 할당해야만 유용한 Adapter라고 생각하기 때문에 BroadcastAdapter를 사용할 때는 onAttachedToRecyclerView, 사용하지 않을 때는 onDetachedFromRecyclerView에 해당한다고 생각합니다. 그런데 문제가 있습니다. 안드로이드 소스코드를 살펴보니 onDetachedFromRecyclerView는 다른 Adapter를 교체할 때만 호출되므로 RecyclerView를 사용하지 않을 때는 해야 합니다. setAdapter(null)

사실 너무 말을 많이 해서 제가 하고 싶은 답변은 아닌데 -|||포스터 디자인이 부족한 것 같아요. 어댑터는 해당 작업(뷰에 데이터 조정)을 성실하게 수행해야 하며 사용자 지정 뷰도 조용히 해당 뷰를 표시해야 합니다. 내 디자인 계획은 이벤트 처리 중에 뷰를 업데이트해야 하는 경우(때때로 이벤트 처리에서 뷰를 업데이트해야 할 뿐만 아니라 데이터도 업데이트해야 하는 경우 등)를
또는

에 넣는 것입니다. 따라서 이를 View에 배치하면 Adapter는 분명히 부적절합니다.) View는 보기를 업데이트할 수 있는 일부 인터페이스를 제공합니다. 이렇게 Activity는 이벤트 처리를 담당하며 ActivityControllerFragment 역할을 하고, View는 단순히 뷰만 담당하는 것이 디커플링이라고 생각합니다. 객체지향 디자인 원칙 중 하나가 단일 책임 원칙입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!