-1

This is my adapter where I had added onclicklistener in Myviewholder. I want to execute onclick functionality on the card view and get the position of the card that is clicked and the send the value of the card i.e selected to other activity using intent. Please help me with this below I had given my adapter and fragment.

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

This below given code is my fragments oncreateview in which I am using above given adapter here in setupRecycler() method i am setting up the adapter but i am unable to get the click functionality.

    @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();
        }*/
    });
}

How can I get the position of the card that is clicked and pass the particular value to other activity.

Please help me out with this.

Elio Lako
  • 1,333
  • 2
  • 16
  • 26
lakshman kumar
  • 341
  • 4
  • 14

2 Answers2

1

You forgot to resister OnClickListener in your MyViewHolder

name.setOnClickListener(this);
iv.setOnClickListener(this);

you need to set OnClickListener inside your MyViewHolder() like this

SAMPLE CODE

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

    }
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
  • thanks bro worked for me how can i send the clicked card name and image to next activity – lakshman kumar Mar 12 '19 at 09:33
  • @lakshmankumar welcome please check my answer here https://stackoverflow.com/a/50127439/7666442 – AskNilesh Mar 12 '19 at 09:34
  • in setupRecycler() method in my fragment i had added Intent intent= new Intent(getActivity(), MainActivity.class); intent.putExtra("BookFullName", dataModelArrayList); startActivity(intent); but it is throwing error while onclicking – lakshman kumar Mar 12 '19 at 09:58
0

put below method inside onBindViewHolder.

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (viewItemInterface != null) {
            viewItemInterface.onItemClick(holder.getAdapterPosition(), bgImage.getCompressedImg());
        }
    }
});
VIISHRUT MAVANII
  • 11,410
  • 7
  • 34
  • 49