Android 显示在recyclerview中单击的项目的详细信息
我能够检测到单个回收商查看项目的位置,并能够在单击时对其进行敬酒。现在我不想继续进行一项新活动并显示所单击项目的详细信息,我该怎么做? 比方说,我正在显示联系人姓名列表,单击“我不想打开一个新的活动”以显示联系人的详细信息。。。 至少,我如何在点击联系人项目时再次敬酒联系人姓名,点击时的当前变量如何对我可用? 我计划将这些变量捆绑在一起,并将它们与意图一起发送并显示在那里 我知道我必须在这里实施Android 显示在recyclerview中单击的项目的详细信息,android,Android,我能够检测到单个回收商查看项目的位置,并能够在单击时对其进行敬酒。现在我不想继续进行一项新活动并显示所单击项目的详细信息,我该怎么做? 比方说,我正在显示联系人姓名列表,单击“我不想打开一个新的活动”以显示联系人的详细信息。。。 至少,我如何在点击联系人项目时再次敬酒联系人姓名,点击时的当前变量如何对我可用? 我计划将这些变量捆绑在一起,并将它们与意图一起发送并显示在那里 我知道我必须在这里实施 public class RecyclerItemClickListener implements
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position){
//i know i have to implement here
}
}
让我们以您自己的联系人列表为例来解释完整的概念。假设我们有一个名为Contact的自定义类,它包含一个字符串“Name”,如下所示:-
class Contact implements Parcelable{
String name;
public void setName(String name) {
this.name = name;
}
public String getName() { return name; }
// Add your Parcelable code here
}
现在,在将侦听器连接到recyclerview的活动中,您的代码如下所示:-
List<Contact> contacts = new ArrayList<>();
// You have to initialize your contacts list with data, I just gave you an example
recyclerItemClickListener = new RecyclerItemClickListener(this,
new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("Key", contacts.get(position);
startActivity(intent);
}
});
recyclerView.addOnItemTouchListener(recyclerItemClickListener);
上面的代码行通过您的密钥从intent检索Contact对象。在此之前,我也遇到过同样的问题 已创建custome RecyclerListener:
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
然后在具有recyclerView的活动中:
private void registerCallClickBack() {
recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity().getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("contact_name", customList.get(position).getName());
intent.putExtra("contact_image", customList.get(position).getImage());
intent.putExtra("contact_tel", customList.get(position).getMobile());
intent.putExtra("contact_email", customList.get(position).getEmail());
startActivity(intent);
}
}));
}
其中customList是我的联系人列表
希望它能有所帮助您必须首先在RecyclerView.Adapter的holder类中实现onClickListener以供查看,就像这样,并从那里开始活动,通过holder访问数据
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
TextView textView1 , textView2;
public ViewHolder(View v) {
super(v);
textView1= (TextView) v.findViewById(R.id.textview1);
textView2= (TextView) v.findViewById(R.id.textview2);
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
ViewHolder h = (ViewHolder)v.getTag();
Intent next = new Intent(YourClass.this, ClassToOpen.class);
next.putExtra("text1", h.textView1.getText().toString());
next.putExtra("text2", h.textView2.getText().toString());
startActivity(next);
}
}
在此之后,在onCreateViewHolder中,您必须像这样为视图设置标记
@Override
public YourAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rowView = LayoutInflater.from(getActivity()).inflate(R.layout.row , parent , false);
ViewHolder holder = new ViewHolder(rowView);
rowView.setTag(holder);
return holder;
}
其他实现应该像您想要的那样。我也有同样的问题 第一种方法是附加所有需要的数据,并将其作为附加数据,然后以此为目的启动所需的活动。在新活动中,从意图中获取所有额外信息。这种方法适用于少量数据,但如果必须将大量数据传递给其他活动,则效果不佳 我使用的第二种方法如下。 创建一个模型类,用于存储所有必需的数据字段。制作模型类的arraylist,并使用此arraylist填充recyclerview。现在,arraylist的每个项都是模型类的对象 假设 您的模型类是MyModel.java
您的arraylist是arraylist您应该在您的意图中使用Intent和putParcceable Extra,如
putpextra(“详细信息”,列表[position])代码>创建可以存储所有字段的模型类,具有模型类的arraylist,在设置适配器时填充arraylist,当您需要数据时,只需使用您在onitemclick
中获得的位置获取arraylist的对象。发布适配器代码查看此答案以了解有关RecyclerItemClickListener的更多信息:-那么我如何在另一个活动中使用键的值呢?这不是一个好方法请使用此方法为什么这么说?这种方法有什么问题?如果您只想显示它们,而不想在其他方法或类似方法中使用对象,那么就足够了。
@Override
public YourAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rowView = LayoutInflater.from(getActivity()).inflate(R.layout.row , parent , false);
ViewHolder holder = new ViewHolder(rowView);
rowView.setTag(holder);
return holder;
}