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