2

Народ , нужна помощь , никак не могу пофиксить баг ... У меня есть RecycleView ,элементы которого состоят из TextView ,ImageView,AnimChackBox .Картинки и текст подгружаются идеально ,а вот c AnimCheckBox проблемы .При нажатии на AnimCheckBox запускается анимация ,вовремя отработки анимации я быстро скролю recycle view ,появляются новые элементы списка, на одном из них завершается и застывает анимация старого AnimCheckBox, mBinding.setModel(item) обновляет картинку и текст , но checkbox не обновляется(остается в застывшем состоянии) . Решения данной проблемы так и не нашел ...

public class ViewHolder2 extends RecyclerView.ViewHolder  {

    private final ItemListForPersonagesDialogBinding mBinding;


    public ViewHolder2( ItemListForPersonagesDialogBinding binding) {
        super(binding.getRoot());
        mBinding=binding;


    }
    public void bind(final Dossier item) {

        // item хранит isSelected

        mBinding.setModel(item);
        mBinding.dialogCheckbox.setOnCheckedChangeListener(null);
        mBinding.setClick(new PersonagesListClick() {
            @Override
            public void onPersonageClick(View view) {

                if(item.isSelected()==true){
                    item.setSelected(false);
                    mBinding.dialogCheckbox.setChecked(item.isSelected(),true);// (значение , анимация)


                    return;
                }else  if(item.isSelected()==false){
                    item.setSelected(true);
                    mBinding.dialogCheckbox.setChecked(item.isSelected(),true); // (значение , анимация)


                    return;
                               }
        });

    }


}


@BindingAdapter({"bind:android:checked"})
public  static void upCB(AnimCheckBox view, boolean isC) {

    view.setChecked(isC,false);  // (значение , анимация)

}

введите сюда описание изображения

  • Вы используете какую то библиотеку, если да, ее нужно указать в вопросе. Holder предназначен для кэширования ссылок на виджеты, а не для биндинга на представления. Где сам адаптер, логика его работы не понятна. Посморите этот ответ, возможно проблема в сохранении состояния айтема – pavlofff Oct 27 '16 at 02:43
  • адаптер просто вызывает метод bind – NIk Dallas Oct 27 '16 at 10:25
  • "Так же вы можете не заводить отдельный массив, а создать дополнительное поле в своей модели данных и писать сохранение состояния туда, так же оттуда и восстанавливать текущее состояние для вывода. Соответственно и возвращать через геттер коллекцию самих моделей. Это может быть полезно, когда требуется связать данные самой модели и их признак чекнутости" - я именно так и сделал.Проблема в другом... – NIk Dallas Oct 27 '16 at 10:27

1 Answers1

1

Нужно было еще очищать анимацию для каждого айтема