2015-11-05 56 views
2

我有一个RecyclerView这是通过膨胀CardView布局构造的。这是通过onCreateViewHolder方法实现的。我将一个ArrayList的数据传递给RecyclerView如何获取RecyclerView CardView中的物品信息Android

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

比方说,我传递的ArrayList的是Person型和人有成员变量idnameemaileducationlocation。 在RecyclerViewonBindViewHolder函数中,我只设置了nameemail

我需要获取该项目的ID,然后只有我可以做一个数据库命令,并获得特定人员的详细信息。

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发送到下一个屏幕。

回答

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

但是,View是一个inbuild类,我如何添加我自己的变量。此外,'onBindViewHolder'是来自ArrayList的数据被设置为视图的地方。 – sreeragnk

+0

是的,您可以添加任何变量作为标签。 View类有它的函数setTag(yourUniqueId,yourValue); OnBindViewHolder不需要做任何事情。只能在onCreateViewHolder方法中设置并设置侦听器。 –

+0

'public void onBindViewHolder(RecyclerViewHolder viewHolder,int i){ //从主数组获得单个元素 viewHolder.mName.setText(person.get_name()); viewHolder.mDesc.setText(person.getDescription()); }' 每个人都有一个ID。创建视图时,此ID未设置。只有名称和desc被设置。我需要传递id以及为列表中的所有人创建的每个视图。 – sreeragnk

0

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

+0

好吧,这似乎是一个临时性的修复。但是,如果我正在改变物品的顺序呢?如何在点击列表项目时将视图中当前显示的Person对象的ID发送到下一个屏幕。 – sreeragnk

+0

您是否在设置适配器之前或之后更改项目的顺序?如果以前,应该没有问题,你会得到所示的人。但是可以在您的回收站视图适配器中添加一个“getPerson(int position)”方法,该方法返回显示的人员 - 通过活动/片段中的'yourAdapter.getPerson(position)'调用。 – yennsarah

相关问题