Recyclerview + CardView OnClickListener

Recyclerview + CardView OnClickListener

我在 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:

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

}