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.