单击某些项目RecyclerView后如何获取一些数据?

时间:2018-08-08 12:35:37

标签: android android-recyclerview

即使在这里,我也已经看到了很多有关此主题的材料,即列表中各个元素的列表。我的应用程序从服务器接收到两个消息列表,即传入和传出消息。当您单击这两个列表之一时,您需要切换到包含所选消息的激活。按下它时,您需要以某种方式将其拔出,然后将此ID放入查询中。我目前有一个RecyclerView的适配器:

package com.example.developer_4.test_login.Tabs;

import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.developer_4.test_login.R;
import com.example.developer_4.test_login.data.model.Message;

import java.util.List;

class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
    private RecyclerView recyclerViewItemClickListener;
    private List<Message> messageList;
    private Context ctx;



    MessageAdapter(List<Message> messageList, Context ctx) {
        this.messageList = messageList;
        this.ctx = ctx;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_of_rec_m, viewGroup, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Message message = messageList.get(position);
        String id = String.valueOf(message.getId());
        holder.subject.setText(message.getSubject());
        holder.from.setText(message.getSender_name());
        holder.date.setText(message.getDate());


        holder.getAdapterPosition();
    }

    @Override
    public int getItemCount() {
        return messageList.size();
    }


    class ViewHolder extends RecyclerView.ViewHolder {
        final TextView from, subject, date;
        int position = 0;

        ViewHolder(View v) {
            super(v);
            subject = v.findViewById(R.id.subject);
            from = v.findViewById(R.id.from);
            date = v.findViewById(R.id.date);
            //id = v.findViewById(R.id.id);


            v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }
            });
        }
    }
}

当我点击消息元素以发送带有我手动输入的消息的ID的请求时,我在服务器的响应类中有一个getId函数,也就是说,我可以得到这个ID,但我不了解如何捕获单独的列表项。我已经看到了使用位置的方法,但是我不习惯它们。))单击此列表的某个元素后,我需要继续传递另一个消息ID的活动,通过该活动我们单击了列表,以便在其他屏幕上显示此消息。

感谢大家提供宝贵的建议,答案和批评))。预先感谢您的合作。

2 个答案:

答案 0 :(得分:1)

您可以通过在onBindViewHolder方法中的任何视图中添加标签来添加数据。

holder.itemView.setTag("Some Data");

然后单击该标签。

v.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
       String someData=(String)view.getTag();
   }
});

答案 1 :(得分:1)

只需尝试设置:

holder.setTag(position);

然后

v.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        int pos = (int)view.getTag();
        Message message = messageList.get(pos);
      }
});