如何找出数据集 (ArrayList<obj>) 中的某个项目当前是否在屏幕 (RecyclerView) 上?

How to find out if a certain item from the dataset (ArrayList<obj>) is currently on the screen (RecyclerView)?

问题出在这里:我有一个数据集:ArrayList<Alarm> alarms,RecyclerView 使用它来显示行。如何确定数据集中的某个项目当前是否在屏幕上?一些东西,比如

boolean bl = recyclerView.isItemOnScreenNow(alarms.get(index));

我知道有一个方法((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); 但据我所知 returns LayoutManager 中的位置,而不是项目在数据集中的位置。那么有没有办法找出数据集中的某个成员当前是否在屏幕上? 谢谢大家!

可以这样做:

         BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int indexToDelete = Integer.MAX_VALUE;
                int idToDelete = intent.getIntExtra("Time to delete", 0);
                int idToDeleteOnScreen = Integer.MAX_VALUE;
           

                for(Iterator<Alarm> iterator = alarms.iterator(); iterator.hasNext();){
                    Alarm alarm = iterator.next();
                    if(alarm.getId() == idToDelete){
                       indexToDelete = alarms.indexOf(alarm);
                       break;
                    }
                }
               

                int index = 0;
                View view;
                while((view = recyclerView.getChildAt(index)) != null){
                    DisturberAdapter.AlarmHolder alarmHolder = (DisturberAdapter.AlarmHolder) recyclerView.getChildViewHolder(view);
                    int itemOnScreenId = alarmHolder.getId();
                    if(idToDelete == itemOnScreenId){
                        idToDeleteOnScreen = index;
                        Log.d("Dnd expireReceiver", "found! "+index);
                        break;
                    }
                   
                    index++;
                }
                if(view == null){
                        //If the item isn't on the screen, no need for animation, just delete
                    alarms.remove(indexToDelete);
                    recyclerView.getAdapter().notifyDataSetChanged();
                }else{
                        //If the view is on the screen start animation
                    animationRecyclerViewItemExpired(idToDeleteOnScreen, indexToDelete);
                }
   

            }
        };