Android : 如何在 Recyclerview Cursoradapter class 中使用 recyclerView.findViewHolderForAdapterPosition
Android : How to use recyclerView.findViewHolderForAdapterPosition inside Recycle View Cursor Adapter class
我正在尝试从回收视图中获取特定位置的查看器。
我发现在 MainActivity 中这样做:
viewHolderRec = recyclerViewInstance.findViewHolderForAdapterPosition(vHID);
它在我的 MainActivity 中运行良好。
但是,当我尝试在我的回收视图游标适配器中实现相同功能时,如下所示:
我已经将光标更改为使用 recycleview :
在我的 MainActivity 中:
final RecyclerView recyclerView = findViewById(R.id.recycle_view);
LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(manager);
recyclerView.setNestedScrollingEnabled(true);
mCursorAdapter = new RecycleCursorAdapter(this, null, recyclerView);
recyclerView.setAdapter(mCursorAdapter);
在 RecycleCursorAdapter 中:
RecyclerView recyclerViewInstance;
public RecycleCursorAdapter(Context context, Cursor cursor, RecyclerView recyclerView) {
super(context, cursor);
recyclerViewInstance = recyclerView;
}
@Override
public void onBindViewHolder(ChatCursorAdapter3.ViewHolder viewHolder, Cursor cursor) {
ChatListItem myListItem = ChatListItem.fromCursor(cursor);
int vHID = viewHolder.getAdapterPosition();
viewHolderRec = (ViewHolder) recyclerViewInstance.findViewHolderForAdapterPosition(vHID - 1);
}
但是viewHolderRec为空
我想获取当前viewHolder之上的view的viewholder。
我只是想知道如何让它工作。
我想要的是在我的回收视图游标适配器中使用 findViewHolderForAdapterPosition() 方法。
是的,我知道我可以使用
viewHolder.getOldPosition()
但在滚动回收视图时,它不能满足我的需求。
提前致谢:-)
我搜索了很多并发现,而不是使用 recyclerViewInstance.findViewHolderForAdapterPosition(vHID - 1);
我可以通过将 viewholders 存储在 List<> 中找到任何位置的 viewholder,例如
List<ViewHolder> vList = new ArrayList<>();
每当我想要任何我无法找到的 viewholder 时
int vHID = viewHolder.getAdapterPosition();
viewHolderRec = vList.get(vHID - 1);
作为我需要做的。
但是,我知道当列表非常大时,这会占用大量内存。
所以我所做的是从内存中删除现在不可见的 viewholders。
为此,我以显示像素 (dp) 为单位获取高度,并通过它获取可见项的数量。并删除所有其他 viewholders。
这个技巧对我有用。可能这对某人有帮助,所以我发布了这个答案。
我正在尝试从回收视图中获取特定位置的查看器。
我发现在 MainActivity 中这样做:
viewHolderRec = recyclerViewInstance.findViewHolderForAdapterPosition(vHID);
它在我的 MainActivity 中运行良好。
但是,当我尝试在我的回收视图游标适配器中实现相同功能时,如下所示:
我已经将光标更改为使用 recycleview :
在我的 MainActivity 中:
final RecyclerView recyclerView = findViewById(R.id.recycle_view);
LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(manager);
recyclerView.setNestedScrollingEnabled(true);
mCursorAdapter = new RecycleCursorAdapter(this, null, recyclerView);
recyclerView.setAdapter(mCursorAdapter);
在 RecycleCursorAdapter 中:
RecyclerView recyclerViewInstance;
public RecycleCursorAdapter(Context context, Cursor cursor, RecyclerView recyclerView) {
super(context, cursor);
recyclerViewInstance = recyclerView;
}
@Override
public void onBindViewHolder(ChatCursorAdapter3.ViewHolder viewHolder, Cursor cursor) {
ChatListItem myListItem = ChatListItem.fromCursor(cursor);
int vHID = viewHolder.getAdapterPosition();
viewHolderRec = (ViewHolder) recyclerViewInstance.findViewHolderForAdapterPosition(vHID - 1);
}
但是viewHolderRec为空
我想获取当前viewHolder之上的view的viewholder。
我只是想知道如何让它工作。 我想要的是在我的回收视图游标适配器中使用 findViewHolderForAdapterPosition() 方法。
是的,我知道我可以使用
viewHolder.getOldPosition()
但在滚动回收视图时,它不能满足我的需求。
提前致谢:-)
我搜索了很多并发现,而不是使用 recyclerViewInstance.findViewHolderForAdapterPosition(vHID - 1);
我可以通过将 viewholders 存储在 List<> 中找到任何位置的 viewholder,例如
List<ViewHolder> vList = new ArrayList<>();
每当我想要任何我无法找到的 viewholder 时
int vHID = viewHolder.getAdapterPosition();
viewHolderRec = vList.get(vHID - 1);
作为我需要做的。
但是,我知道当列表非常大时,这会占用大量内存。 所以我所做的是从内存中删除现在不可见的 viewholders。
为此,我以显示像素 (dp) 为单位获取高度,并通过它获取可见项的数量。并删除所有其他 viewholders。
这个技巧对我有用。可能这对某人有帮助,所以我发布了这个答案。