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

问题描述

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

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

我知道有一个方法((linearlayoutmanager)recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); 但据我所知,它返回 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);
                }
   

            }
        };

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...