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。

这个技巧对我有用。可能这对某人有帮助,所以我发布了这个答案。