Android:如何在Recycle View Cursor Adapter类中使用recyclelerView.findViewHolderForAdapterPosition

时间:2018-04-30 12:09:29

标签: android android-recyclerview cursor recycler-adapter

我正试图从循环视图中获取特定位置的视图。

我发现这样做是通过在MainActivity中执行此操作:

Out[41]: 
array([[(0, 0, 0, 0.0, 0.0), (1, 1, 1, 1.0, 1.0), (2, 2, 2, 2.0, 2.0),
        (3, 3, 3, 3.0, 3.0), (4, 4, 4, 4.0, 4.0)],
       [(5, 5, 5, 5.0, 5.0), (6, 6, 6, 6.0, 6.0), (7, 7, 7, 7.0, 7.0),
        (8, 8, 8, 8.0, 8.0), (9, 9, 9, 9.0, 9.0)],
       [(10, 10, 10, 10.0, 10.0), (11, 11, 11, 11.0, 11.0),
        (12, 12, 12, 12.0, 12.0), (13, 13, 13, 13.0, 13.0),
        (14, 14, 14, 14.0, 14.0)],
       [(15, 15, 15, 15.0, 15.0), (16, 16, 16, 16.0, 16.0),
        (17, 17, 17, 17.0, 17.0), (18, 18, 18, 18.0, 18.0),
        (19, 19, 19, 19.0, 19.0)],
       [(20, 20, 20, 20.0, 20.0), (21, 21, 21, 21.0, 21.0),
        (22, 22, 22, 22.0, 22.0), (23, 23, 23, 23.0, 23.0),
        (24, 24, 24, 24.0, 24.0)]], 
      dtype=[('width', '<i4'), ('height', '<i4'), ('depth', '<i4'), ('score', '<f4'), ('auc', '<f4')])

在我的MainActivity中运行良好。

但是,当我尝试在我的循环视图游标适配器中实现相同的内容时:

我已将光标更改为采用recycleview:

在我的MainActivity中:

viewHolderRec = recyclerViewInstance.findViewHolderForAdapterPosition(vHID);

在RecycleCursorAdapter中:

    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);

但是viewHolderRec为空。

我想获取当前viewHolder之上的视图的视图。

我只是想知道如何让它发挥作用。 我想要的是在我的循环视图游标适配器中使用findViewHolderForAdapterPosition()方法。

是的,我知道我可以使用

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);
}

但在滚动循环视图时,它无法满足我的需求。

提前致谢: - )

1 个答案:

答案 0 :(得分:0)

我经常搜索并发现,而不是使用recyclerViewInstance.findViewHolderForAdapterPosition(vHID - 1);

我可以通过将视图存储在List&lt;&gt;中来查找任何位置的视图。喜欢

List<ViewHolder> vList = new ArrayList<>();

每当我想要观察者的任何可能性时,我都可以找到

int vHID = viewHolder.getAdapterPosition();
viewHolderRec = vList.get(vHID - 1);

正如我需要做的那样。

但是,我知道当列表非常大时,这会影响很多内存。 所以我所做的就是从内存中删除目前看不到的视图。

为此,我得到显示像素(dp)的高度,并通过它得到可见项目的数量。并删除所有其他视图。

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