Recyclerview + CardView OnClickListener [英] Recyclerview + CardView OnClickListener
问题描述
我在 CardView
中为我的数据列表使用了 Recyclerview
,但我不知道如何在我的数据列表中进行 onClick.有人可以帮我解决这个问题吗?
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?
我的代码是:
HomeFragment.Java
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;
}
}
我将 Adapter
用于 Recyclerview
:
适配器.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);
}
});
}
}
}
我已经为 onClickListener
编辑了我的适配器请帮我解决这个问题.
I have edited my adapter for onClickListener
Please help me to solve this.
推荐答案
您可以将 OnClickListener
添加到 ReyclerView
行的根项,即 itemView
在您的示例中.
You can add the OnClickListener
to the root item of the ReyclerView
row which is itemView
in your example.
您可以选择在 ViewHolder
构造函数或 onBindViewHolder
方法中执行此操作
You can do that optionally in the ViewHolder
constructor or in onBindViewHolder
method
这是在 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();
}
});
}
}
并且在 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();
}
});
}
这篇关于Recyclerview + CardView OnClickListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!