Java 如何在RecyclerView CardView Android中获取项目信息

Java 如何在RecyclerView CardView Android中获取项目信息,java,android,arraylist,Java,Android,Arraylist,我有一个RecyclerView,它是通过膨胀cardwiew布局构建的。这是通过onCreateViewHolder方法实现的。我正在将数据的ArrayList传递给RecyclerView 我的要求是,单击列表项时,我必须加载一个新页面,其中显示所单击项的详细信息。为此,我需要获取单击的项目的id,该id未显示在视图中。在视图中,我只有项目的名称和电子邮件 比方说,我传递的数组列表类型为Person,Person有成员变量id,name,email,education,location。 在

我有一个
RecyclerView
,它是通过膨胀
cardwiew
布局构建的。这是通过
onCreateViewHolder
方法实现的。我正在将数据的
ArrayList
传递给
RecyclerView

我的要求是,单击列表项时,我必须加载一个新页面,其中显示所单击项的详细信息。为此,我需要获取单击的项目的id,该id未显示在视图中。在视图中,我只有项目的名称和电子邮件

比方说,我传递的数组列表类型为
Person
,Person有成员变量
id
name
email
education
location
。 在
RecyclerView
onBindViewHolder
功能中,我只设置
名称
电子邮件

我需要获取项目的id,然后只有我可以执行db命令并获取特定人员的详细信息

RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.recyclerList);
rv.setAdapter(new NGOViewHolder(ArrayList()));
rv.addOnItemTouchListener( // and the click is handled
            new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                    Intent intent = new Intent(getActivity(),NGODetails.class);
                    intent.putExtra("ID", (IDOfTheItemClicked));

}));
我的要求是,
IDOfTheItemClicked
,这是在上面传递的

Intent(getActivity(),NGODetails.class);
                    intent.putExtra("ID", (IDOfTheItemClicked));
应该是我最初传递的
ArrayList
中的项的id


如何在单击列表项时将视图中当前显示的
Person
对象的
id
发送到下一个屏幕。

如果您不更改适配器中项目的顺序,只需调用
yourArrayList.get(position)。您的GetIDoftheItemClickedMethod
在onClick中。

但是,View是一个内置类,如何添加自己的变量。另外,
onBindViewHolder
是将ArrayList中的数据设置为视图的位置。是的,您可以将任何变量添加为标记。视图类有它的函数setTag(yourUniqueId,yourValue);OnBindViewHolder中不需要执行任何操作。仅在onCreateViewHolder方法中设置并设置侦听器。
public void onBindViewHolder(RecycleServiceWholder viewHolder,int i){//从主数组中获取单个元素//设置值Person Person=personList.get(i);viewHolder.mName.setText(Person.get_name());viewHolder.mDesc.setText(person.getDescription());}
每个人都有一个id。创建视图时未设置此id。只设置名称和描述。我需要将id与为列表中所有人创建的每个视图一起传递。setTag如下:@Override public void onBindViewHolder(myViewHolder viewHolder,int position){viewHolder.mCardView.setTag(position);}按如下方式获取:私有类myViewHolder扩展RecyclerView.viewHolder实现View.OnClickListener{public View mCardView;public myViewHolder(View视图视图){super(视图);mCardView=(CardView)视图。findViewById(R.id.card_视图);mCardView.setOnClickListener(this);}@Override public void onClick(视图){String position=View.getTag().toString();int pos=Integer.ParseInt(position);yourArrayList.get(pos).get……;}嗯,这似乎是一个临时修复。但是,如果我正在更改项目的顺序呢?我如何才能在单击列表项目时将视图中当前显示的
Person
对象的id发送到下一个屏幕。您是在设置适配器之前还是之后更改项目的顺序?如果在之前,应该没有issue,您正在获取显示的人物。但是可以向您的recyclerview适配器添加一个“getPerson(int position)”方法,该方法返回显示的人物-通过活动/片段中的
yourAdapter.getPerson(position)
调用。
set position for each item using setTag inside onCreateViewHolder method after that when you'll click then inside onclick you get a view reference from there, get that tag and convert to int( this will give you position of view)

onCreateViewHolder(............){
View view;
view.setTag(id, position);
view.setOnTouch or Onclick(View v){
String position = v.getTag(),toString();
// get your id using this position
}
}