首页 > 解决方案 > Android ListView 中的 RxJava - 如何跟踪每一行的 Observables?

问题描述

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

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

我卡住的地方是当列表滚动并且视图开始被回收时:

标签: androidlistviewrx-javarx-android

解决方案


当您的项目视图附加/分离时,您需要订阅/取消订阅您的 observable,例如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( );
    }
}

推荐阅读