android - Recyclerview + CardView OnClickListener

标签 android android-recyclerview cardview clicklistener

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

相关文章:

android - 我怎样才能在选定的卡片 View 上点击时出现涟漪和其他前景?

android - 以编程方式在 LinearLayout 中将 CardView 居中

Android 与 Twitter 的连接 - 从 twitter 获取空答案

java - 如何使用Java上传图像Url上传到Fire Storage并同时将其保存在fireStore中

java - 具有自定义背景颜色的Android AlertDialog setMultiChoiceItems

android - Admob 原生高级广告在 recyclerview 中重复

android - 卡片尺寸不同

android - 使用导航组件重新加载 fragment

android - RecyclerView.Adapter 和 ImageView.getWidth()

Android - java.lang.IndexOutOfBoundsException : Invalid item position 0(0). 项目数:0