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