RxJava в Android ListView - Как отслеживать наблюдаемые для каждой строки? - PullRequest
0 голосов
/ 31 мая 2018

Мы используем пользовательский ListViewAdapter для создания списка в нашем приложении для Android.Каждая строка в ListView имеет кнопку.Мы также используем пользовательский класс Observable<Object> в качестве нашей наблюдаемой.

В ListViewAdapter, в методе getView(...) я создаю наблюдателя для кнопки данной строки, затем добавляю этого наблюдателя вPublishSubject в адаптере.

Я застреваю в том, что когда список прокручивается и представления начинают перерабатываться:

  • Как удалить кнопку данной строкиНаблюдатель из PublishSubject
  • Как мне отследить, была ли кнопка данной строки уже добавлена ​​в PublishSubject?
  • Что-нибудь еще, что мне нужно учитывать здесь?

1 Ответ

0 голосов
/ 31 мая 2018

Вам необходимо подписаться / отписаться от вашей наблюдаемой, когда ваш элемент просмотра прикреплен / отсоединен, например, от 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( );
    }
}
...