android - Android ListView 中的 RxJava - 如何跟踪每一行的 Observables?
问题描述
我们正在使用自定义ListViewAdapter
在我们的 Android 应用程序中构建一个列表。中的每一行ListView
都有一个按钮。我们还使用自定义Observable<Object>
类作为我们的 observable。
在方法中ListViewAdapter
,getView(...)
我为给定行的按钮创建观察者,然后将该观察者添加到PublishSubject
适配器中的 a 中。
我卡住的地方是当列表滚动并且视图开始被回收时:
- 如何从给定行的 Button Observer 中删除
PublishSubject
- 如何跟踪给定行的按钮是否已添加到
PublishSubject
? - 还有什么我需要在这里考虑的吗?
解决方案
当您的项目视图附加/分离时,您需要订阅/取消订阅您的 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( );
}
}
推荐阅读
- c# - C# Emit 创建动态属性 ToString 方法
- python - python排序程序,它使用字典来显示句子由第一个出现的字母组成的字母,而不是按字母顺序排列
- excel - Laravel 5.7:SQLSTATE [22007]:无效的日期时间格式:1292 不正确的日期值:第 1 行的列“resident_dob”的“35492”
- django - 大家好,我是 django 新手,我想显示 ChoiceField 的值
- unreal-engine4 - 多播代表 - C++
- subscript - 如何在概念块中添加下标(或上标)?
- c# - 查询 IEnumerable 中的值
用于访问令牌 - android - Android 调试跟踪不包含所有方法?
- ios - 来自 Apple 的二进制拒绝
- php - 如何将用户直接引导至表单