RecyclerView OnClickListener using interface

后端 未结 11 773
清歌不尽
清歌不尽 2020-12-01 09:49

I use RecyclerView adapter to display data inside an activity, I want to implement onClickListener inside the activity, currently, I am setting

11条回答
  •  离开以前
    2020-12-01 09:59

    I found super duper easy method! I recommend this one

    Example Code:

    public class ContentAdapter extends RecyclerView.Adapter {
    
    public interface OnItemClickListener {
        void onItemClick(ContentItem item);
    }
    
    private final List items;
    private final OnItemClickListener listener;
    
    public ContentAdapter(List items, OnItemClickListener listener) {
        this.items = items;
        this.listener = listener;
    }
    
    @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false);
        return new ViewHolder(v);
    }
    
    @Override public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bind(items.get(position), listener);
    }
    
    @Override public int getItemCount() {
        return items.size();
    }
    
    static class ViewHolder extends RecyclerView.ViewHolder {
    
        private TextView name;
        private ImageView image;
    
        public ViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.name);
            image = (ImageView) itemView.findViewById(R.id.image);
        }
    
        public void bind(final ContentItem item, final OnItemClickListener listener) {
            name.setText(item.name);
            Picasso.with(itemView.getContext()).load(item.imageUrl).into(image);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override public void onClick(View v) {
                    listener.onItemClick(item);
                }
            });
        }
    }
    }
    

    And Use RecyclerView Adapter using below code:

    recycler.setAdapter(new ContentAdapter(items, new ContentAdapter.OnItemClickListener() {
    @Override public void onItemClick(ContentItem item) {
        Toast.makeText(getContext(), "Item Clicked", Toast.LENGTH_LONG).show();
    }
    }));
    

    i found this from here

    Hope it helped you.

提交回复
热议问题