Android ListView 中的 RxJava - 如何跟踪每一行的 Observable?
RxJava within Android ListView - How to Track Observables for Each Row?
我们正在使用自定义 ListViewAdapter
在我们的 Android 应用程序中构建列表。 ListView
中的每一行都有一个按钮。我们还使用自定义 Observable<Object>
class 作为我们的可观察对象。
在 ListViewAdapter
中,在 getView(...)
方法中,我为给定行的按钮创建观察者,然后将该观察者添加到适配器中的 PublishSubject
。
我卡住的地方是当滚动列表并且视图开始回收时:
- 如何从
PublishSubject
中删除给定行的 Button Observer
- 如何跟踪给定行的按钮是否已添加到
PublishSubject
?
- 还有什么我需要说明的吗?
当您的项目视图为 attach/detach 时,您需要 subscribe/unsubscribe 到您的可观察对象,示例来自 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( );
}
}
我们正在使用自定义 ListViewAdapter
在我们的 Android 应用程序中构建列表。 ListView
中的每一行都有一个按钮。我们还使用自定义 Observable<Object>
class 作为我们的可观察对象。
在 ListViewAdapter
中,在 getView(...)
方法中,我为给定行的按钮创建观察者,然后将该观察者添加到适配器中的 PublishSubject
。
我卡住的地方是当滚动列表并且视图开始回收时:
- 如何从
PublishSubject
中删除给定行的 Button Observer
- 如何跟踪给定行的按钮是否已添加到
PublishSubject
? - 还有什么我需要说明的吗?
当您的项目视图为 attach/detach 时,您需要 subscribe/unsubscribe 到您的可观察对象,示例来自 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( );
}
}