Android ListView中的RxJava - 如何跟踪每行的Observable?

时间:2018-05-31 14:10:52

标签: android listview rx-java rx-android

我们正在使用自定义ListViewAdapter在我们的Android应用中构建列表。 ListView中的每一行都有一个按钮。我们还使用自定义Observable<Object>类作为我们的可观察对象。

ListViewAdapter中,在getView(...)方法中,我正在为给定行的按钮创建观察者,然后我将该观察者添加到适配器中的PublishSubject

我遇到的问题是当列表滚动并且视图开始被回收时:

  • 如何从PublishSubject
  • 中删除给定行的Button Observer
  • 如何跟踪给定行的按钮是否已添加到PublishSubject
  • 我还需要考虑其他什么吗?

1 个答案:

答案 0 :(得分:0)

您需要在附加/分离项目视图时订阅/取消订阅您的观察信息,例如RecyclerView ViewHolder

class MyViewHolder extends RecyclerView.ViewHolder
        implements View.OnAttachStateChangeListener
{

    private Disposable mDisposable;

    MyViewHolder ( View itemView )
    {
        super( itemView );
        itemView.addOnAttachStateChangeListener( this );
    }

    @Override
    public void onViewAttachedToWindow( View v )
    {
        if( mDisposable != null )
            mDisposable.dispose( );
        mDisposable = myObservable.subscribe();

    @Override
    public void onViewDetachedFromWindow( View v )
    {
        if( mDisposable != null )
            mDisposable.dispose( );
    }
}