Хронометры внутри элементов в RecyclerView, которые не видны пользователям, не запускаются,

#java #android #android-recyclerview

#java #Android #android-recyclerview

Вопрос:

Я создал представление recycler, которое обновляется с помощью сбора данных в произвольное время, у меня есть хронометр, отображаемый на каждом из этих элементов, и в некоторых случаях эти хронометры должны запускаться, как только они отображаются, проблема в том, что хронометры, которые не были замечены пользователем, не отображаются.не запускается, пока пользователь не перейдет к ним.

Я использую android-studio в recyclerview, используя gridlayoutmanager.

Я попытался с

 GridLayoutManager itemlistManager= new GridLayoutManager(getApplicationContext(),3);
itemlistManager.setItemPrefetchEnabled(true);
itemlistManager.collectAdjacentPrefetchPositions(3,10,null,null);
 

Но это не показывает никакой разницы

Ожидаемое поведение состоит в том, чтобы все хронометры тикали, как только создается представление, но прямо сейчас мне нужно прокрутить вниз, чтобы хронометры в конце списка запускались.

bindViewHolder

     @Override

 public void onBindViewHolder(@NonNull final ViewHolderData holder, final int position) {

        long sumtime=0,diferenceToSum=0;
       if(myConstants.chronometerFix){
           holder.myChronometer.setBase(SystemClock.elapsedRealtime());
       }else{
        if(myList.get(position).getCronometerTimeSum()!=nullamp;amp;!myList.get(position).getCronometerTimeSum().trim().isEmpty()){
               sumtime = myUtilities.string2milis(myList.get(position).getCronometerTimeSum());
           }
           if(myList.get(position).getMyItemState().equals("1")){
               if(myList.get(position).getCronometerStart()!=nullamp;amp;!myList.get(position).getCronometerStart().trim().isEmpty()amp;amp;myList.get(position).getServerTime()!=nullamp;amp;!myList.get(position).getServerTime().trim().isEmpty()){
                   diferenceToSum = myUtilities.datesCompareToMilis(myList.get(position).getCronometerStart(),myList.get(position).getServerTime());
               }
               holder.myChronometer.setBase(SystemClock.elapsedRealtime()-sumtime-myConstants.myCronometerOffsetFinal-diferenceToSum);
holder.myChronometer.start();
           }else{
               holder.myChronometer.setBase(SystemClock.elapsedRealtime()-sumtime);
           }
       }
        String temp =  myList.get(position).getName()  
                " / "  
                myList.get(position).getItemName()  
                " / "  
               myList.get(position).getPosition();
        holder.myNamePositionItem.setText(temp);
       holder.myPosition.setText(String.valueOf(myList.get(position).getPosition()));
        holder.myName.setText(myList.get(position).getMyName());
    }
 

Комментарии:

1. Не могли бы вы вставить свою RecyclerView.Adapter bindViewHolder реализацию?

2. Это не ошибка — представления не создаются, если они не видны. ViewHolder они предназначены для отображения (или взаимодействия) только с данными, а не для их активного хранения. Более того, при прокрутке представления, которые покидают область просмотра, фактически используются повторно и привязываются к другим позициям. Мой вопрос в том, зачем вам нужны хронометры, работающие для элементов, которые не видны?

3. Павел, мне нужны работающие хронометры, потому что мне нужно знать, как долго они находятся на моем устройстве, независимо от того, вижу я их или нет