android - 如何找出数据集中的某个项目(ArrayList) 当前在屏幕上 (RecyclerView)?
问题描述
这是问题所在:我有一个 dataset: 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);
}
}
};
推荐阅读
- python - 如何修改 dijkstra 以计算最小最大瓶颈路线?
- json - 如何在 freemarker(ftl) 文件中读取 JSON 文件的值?
- android - 如何让 UI Automator 等到 TextView 的文本值发生变化
- python - 将 keras 用于两个输出的神经网络的问题
- xml - XSLT 从两个标签中复制索引属性为 1/2 的单个标签
- json - Nexus 脚本不返回有效的 JSON
- r - 在 R 中转置数据框并更改列名
- javascript - 更改所选颜色
- python - 用 1s 填充数据框(全为零)的最简单方法是什么
- swift - Swift Mac Os 应用程序 - NSSavePanel 在“仅后台”应用程序中的行为不正确