Обновление пользовательского интерфейса RecyclerView с использованием наблюдаемого объекта данных, работающего только с первым элементом в списке - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь обновить пользовательский интерфейс элементов RecyclerView, используя наблюдаемый объект данных, у этого объекта есть логическая переменная «checker», а когда checker = true, функция в @BindingAdapter будет запущена из того же класса объектов, поскольку я объявил там @BindingAdapter, и таймер будет работать в этом элементе


public class TestObject extends BaseObservable {



    private static final String TAG = "TestObject";
    private boolean checker;
    private CountDownTimer timer;
    private long time;



    public TestObject(){
        this.time=120000;
    }





    @Bindable
    public boolean getChecker() {
        return checker;
    }

    public void setChecker(boolean checker) {
        this.checker = checker;
        notifyPropertyChanged(BR.checker);

    }




    @BindingAdapter({"bind:opject", "bind:checker"})
    public static   void loadSlot (View view, TestObject opject, boolean checker){

        if(checker){
            update(opject,view);

        }

    }






    private  void setTimer(TestObject object, final View view) {
        object.timer=new CountDownTimer(object.time,1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                ((TextView)view.getRootView().findViewById(R.id.timer_textview)).setText(getDateFromMillis(millisUntilFinished,"mm:ss"));
            }

            @Override
            public void onFinish() {

            }
        };
        timer.start();
    }
}



а вот макет

<android.support.constraint.ConstraintLayout
     android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@color/colorPrimary">


        <TextView
            android:id="@+id/timer_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="00:00"
            bind:checker="@{object.checker}"
            bind:opject="@{object}"/>

теперь, когда «checker» равен true, таймер будет работать и появляться в первом элементе, но при добавлении нового элемента в список и установке «checker» в true таймер фактически работает, но появляется в первом элементе в список, так что теперь первый список работает все таймеры.

так что, пожалуйста, кто-нибудь может до меня доказать, что не так в моем коде, и предоставить мне наилучшую практику для получения чистого чистого результата?

...