如何从特定的适配器位置获取RecyclerView中的视图并获取这些视图的值?

7

我有一个RecyclerView,每个行布局中都有一个ImageView和一个TextView。在RecyclerViewAdapter的ViewHolder中,我将点击监听器设置为

 v.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                     Images i=list.get(getAdapterPosition());
                     i.setFlag(!i.getFlag());
                     list.set(getAdapterPosition(),(i));
                     notifyDataSetChanged();
                 }
             });

在这个点击监听器中,我正在更改布尔标志,以便它可以显示某个项目是否已经被选中。根据它的值,我想通过检查整个ArrayList来遍历。

for(int i=0; i<images.size(); i++){
                if(images.get(i).getFlag()){

                    // there I want to get view from LayoutManager for that item
                    //but how to get view for that item and get Bitmap form imageview for that item
                    //end of geting view 
                }
            }

请帮忙从Recyclerview获取特定适配器位置的视图。以下图片反映了我的问题: enter image description here

你是否正在使用适配器来设置ImageView和TextView? - Vinesh Chauhan
是的,我使用了RecyclerViewAdapter。 - Mashhood Qadeer
尝试在适配器中添加点击监听器。 - Vinesh Chauhan
你可以获取点击的位置,并通过位置获取图像,如果你传递了图像视图列表并在此处发布你的适配器。 - Vinesh Chauhan
先生!添加点击监听器不是我的问题,因为我们想要访问 RecyclerView 适配器外部的视图,并根据标志的布尔值获取 RecyclerView 布局管理器中的视图。 - Mashhood Qadeer
1
接受@Prem的答案,如果解决了您的问题,那么其他人可以找到最佳解决方案。 - Vinesh Chauhan
1个回答

11

尝试使用recyclerView.getLayoutManager().findViewByPosition(int position)来获取recyclerView的特定行。

View row = recyclerView.getLayoutManager().findViewByPosition(0);
TextView textView = row.findViewById(R.id.YourTextviwID);
textView.setText("Nilu");
ImageView textView = row.findViewById(R.id.YourImageViewID);
imageView.setBackgroundResource(R.mipmap.ic_launcher);

注意:仅当您滚动RecyclerView时在屏幕上显示的项目才会从内存中移除。

编辑:您可以在适配器中编写一个公共方法来获取您的arraylist,在活动中检查您的标志。


先生!我想听听您对我的工作的意见。如果我想从RecyclerView中所有标记为true的ImageView中获取位图,这样做是否可行? - Mashhood Qadeer
我使用了一个公共方法和以下代码来获取所选TextView的文本:try{ for(int i=0; i<images.size(); i++){ if(images.get(i).getFlag()){ View row = recyclerView.getLayoutManager().findViewByPosition(i); TextView textView = (TextView) row.findViewById(R.id.counter); PrintToast("我们得到了 "+textView.getText()); } } } catch (Exception ex){ PrintToast("异常类型为 ex "+ex.getMessage()); } - Mashhood Qadeer
你不能让recyclerView停止回收视图。 - Goku
那么为什么要使用 holder.setIsRecyclable(false) 这个方法呢? - Mashhood Qadeer
1
感谢您,非常感谢!非常感谢!......非常感谢。您已经解决了我的问题——如何从RecyclerView获取特定位置的视图。 - Mashhood Qadeer
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接