I'm using Recyclerview
for my datalist in CardView
, but I don't know how to make onClick in my data list. Can someone help me to solve this?
My code is:
HomeFragment.Java
public class HomeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_grid_layout, container, false);
dataList = view.findViewById(R.id.dataList);
titles = new ArrayList<>();
images = new ArrayList<>();
titles.add("Berita");
titles.add("Customer Care");
titles.add("Cabang Clipan");
titles.add("Info Layanan");
titles.add("Info Pembayaran");
titles.add("Promo");
titles.add("Syarat Kedit");
titles.add("Simulasi Kredit");
images.add(R.drawable.ic_article);
images.add(R.drawable.ic_cs);
images.add(R.drawable.ic_cbng_clipan);
images.add(R.drawable.ic_simulation);
adapter = new Adapter(getActivity(), titles, images);
GridLayoutManager gridLayoutManager = new
GridLayoutManager(getActivity(), 4, GridLayoutManager.VERTICAL, false);
dataList.setLayoutManager(gridLayoutManager);
dataList.setHasFixedSize(true);
dataList.setAdapter(adapter);
return view;
}
}
I'm using Adapter
for Recyclerview
:
Adapter.Java
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
List<String> titles;
List<Integer> images;
Context ctx;
LayoutInflater inflater;
public Adapter(Context ctx, List<String> titles,List<Integer> images){
this.titles = titles;
this.images = images;
this.inflater = LayoutInflater.from(ctx);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.fragment_home,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.title.setText(titles.get(position));
holder.gridIcon.setImageResource(images.get(position));
}
@Override
public int getItemCount() {
return titles.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView title;
ImageView gridIcon;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.text_1);
gridIcon = itemView.findViewById(R.id.image_1);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"Click on " + getAdapterPosition(),Toast.LENGTH_LONG).show();
Intent i = new Intent(v.getContext(),SimulationActivity.class);
i.setFlags(i.FLAG_ACTIVITY_NEW_TASK);
v.getContext().startActivity(i);
}
});
}
}
}
I have edited my adapter for onClickListener
Please help me to solve this.
You can add the OnClickListener
to the root item of the ReyclerView
row which is itemView
in your example.
You can do that optionally in the ViewHolder
constructor or in onBindViewHolder
method
Here it's in the ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder{
TextView title;
ImageView gridIcon;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.text_1);
gridIcon = itemView.findViewById(R.id.image_1);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "My Item position: " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
});
}
}
And in the onBindViewHolder
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.title.setText(titles.get(position));
holder.gridIcon.setImageResource(images.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "My Item position: " + position, Toast.LENGTH_SHORT).show();
}
});
}