【问题标题】:How to add on click functionality to recycler view?如何将点击功能添加到回收站视图?
【发布时间】:2019-03-12 08:22:10
【问题描述】:

这是我在 Myviewholder 中添加 onclicklistener 的适配器。我想在卡片视图上执行 onclick 功能并获取被点击卡片的位置以及发送卡片的值,即使用意图选择到其他活动。请在下面帮我解决这个问题,我已经给了我的适配器和片段。

private LayoutInflater inflater;
private ArrayList<Books> dataModelArrayList;
private OnItemClickListener onItemClickListener;

private Context ctx;

String url = "https://test1.xz.com/pub/media/wysiwyg/";

public MyRecyclerAdapter(Context ctx, ArrayList<Books> dataModelArrayList){
    inflater = LayoutInflater.from(ctx);
    this.dataModelArrayList = dataModelArrayList;
}

@Override
public MyRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = inflater.inflate(R.layout.singleitem_recyclerview, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MyRecyclerAdapter.MyViewHolder holder, int position) {
    if (dataModelArrayList.get(position).getImage().isEmpty()) {
        Picasso.get().load(R.drawable.placeholder)
                .placeholder(R.drawable.placeholder)
                .error(R.drawable.placeholder)
                .into(holder.iv);
    }else{Picasso.get().load(url + dataModelArrayList.get(position).getImage()).into(holder.iv);}
    holder.name.setText(dataModelArrayList.get(position).getBookFullName());
}

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

class MyViewHolder extends RecyclerView.ViewHolder implements
        View.OnClickListener{

    TextView name;
    ImageView iv;

    public MyViewHolder(View itemView) {
        super(itemView);

        name = (TextView) itemView.findViewById(R.id.name);
        iv = (ImageView) itemView.findViewById(R.id.iv);
    }

    @Override
    public void onClick(View v) {

        onItemClickListener.onItemClick(dataModelArrayList);
    }
}

public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
    this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
    void onItemClick(ArrayList<Books> Books);
}

下面给出的代码是我在 setupRecycler() 方法中使用上面给定适配器的 oncreateview 片段我正在设置适配器,但我无法获得点击功能。

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    view = inflater.inflate(R.layout.fragment_home, container, false);
    recyclerView = view.findViewById(R.id.recycler);
    fetchingJSON();

    return view;
}

private void fetchingJSON() {

    showSimpleProgressDialog(getActivity(), "Loading...","Loading",false);

    StringRequest stringRequest = new StringRequest(Request.Method.GET, URLs.URL_BOOKS,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("response", ">>" + response);

                    try {
                        removeSimpleProgressDialog();

                        JSONObject obj = new JSONObject(response);
                        if(obj.optString("status_code").equals("200")){

                            dataModelArrayList = new ArrayList<>();
                            JSONArray dataArray  = obj.getJSONArray("data");

                            for (int i = 0; i < dataArray.length(); i++) {
                                Books playerModel = new Books();
                                JSONObject dataobj = dataArray.getJSONObject(i);

                                playerModel.setImage(dataobj.getString("Image"));
                                playerModel.setBookFullName(dataobj.getString("BookFullName"));

                                dataModelArrayList.add(playerModel);
                            }
                            setupRecycler();
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //displaying the error in toast if occurrs
                    Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });

    // request queue
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());

    requestQueue.add(stringRequest);
}

private void setupRecycler(){

    rvAdapter= new MyRecyclerAdapter(getActivity().getApplicationContext(), dataModelArrayList);
    recyclerView.setAdapter(rvAdapter);
    recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), getResources().getInteger(R.integer.number_of_grid_items)));
    rvAdapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(ArrayList<Books> Books) {
            //Toast.makeText(getActivity(), "lakshman", Toast.LENGTH_LONG).show();
            Toast.makeText(getActivity(), Books.getBookFullName(), Toast.LENGTH_LONG).show();
        }

        /*@Override
        public void onItemClick(Books Books) {
            Toast.makeText(getActivity(), Books.getBookFullName(), Toast.LENGTH_LONG).show();
        }*/
    });
}

如何获取被点击卡片的位置并将特定值传递给其他活动。

请帮帮我。

【问题讨论】:

标签: android android-intent android-recyclerview


【解决方案1】:

您忘记在 MyViewHolder

中抵抗 OnClickListener
name.setOnClickListener(this);
iv.setOnClickListener(this);

你需要像这样在你的MyViewHolder()中设置OnClickListener

示例代码

 public MyViewHolder(View itemView) {
        super(itemView);

        name = (TextView) itemView.findViewById(R.id.name);
        iv = (ImageView) itemView.findViewById(R.id.iv);
        name.setOnClickListener(this);
        iv.setOnClickListener(this);

    }

【讨论】:

  • 感谢兄弟为我工作,如何将点击的卡片名称和图像发送到下一个活动
  • @lakshmankumar 欢迎您在这里查看我的答案stackoverflow.com/a/50127439/7666442
  • 在我的片段的 setupRecycler() 方法中,我添加了 Intent intent= new Intent(getActivity(), MainActivity.class); intent.putExtra("BookFullName", dataModelArrayList);开始活动(意图);但它在点击时抛出错误
【解决方案2】:

把下面的方法放在onBindViewHolder里面。

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (viewItemInterface != null) {
            viewItemInterface.onItemClick(holder.getAdapterPosition(), bgImage.getCompressedImg());
        }
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2020-10-31
    • 2018-02-25
    相关资源
    最近更新 更多