Recyclerview + CardView OnClickListener [英] Recyclerview + CardView OnClickListener

查看:25
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆