我在 CardView
中使用 Recyclerview
作为我的数据列表,但我不知道如何在我的数据列表中创建 onClick。有人可以帮我解决这个问题吗?
我的代码是:
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;
}
}
我正在为 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);
}
});
}
}
}
我已经编辑了 onClickListener
的适配器
请帮我解决这个问题。
最佳答案
您可以将 OnClickListener
添加到 ReyclerView
行的根项(在示例中为 itemView
)。
您可以选择在 ViewHolder
构造函数或 onBindViewHolder
方法中执行此操作
这里是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();
}
});
}
关于android - Recyclerview + CardView OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65266088/