RecyclerView适配器自定义侦听器界面 [英] RecyclerView adapter custom listener interface

查看:70
本文介绍了RecyclerView适配器自定义侦听器界面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有自定义侦听器的RecyclerView,该侦听器要在我的主要活动中实现,以便在单击RecyclerView项时得到通知.

I have a RecyclerView with a custom listener that I want to implement in my main activity so that it gets notified when the RecyclerView item gets clicked.

但是,我不确定将setMyAdapterListener放在适配器中的位置.我会放在哪里?

However, I'm not sure where to put setMyAdapterListener in the adapter. Where would I put it?

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;

    private List<Data> data;

    private MyAdapterListener myAdapterListener;

    public MyAdapter(Context context, List<Object> data) {
        this.context = context;
        this.data = data;
    }

    public interface MyAdapterListener {
        void onContainerClick();
    }

    public void setMyAdapterListener(MyAdapterListener myAdapterListener) {
        this.myAdapterListener = myAdapterListener;
    }

    public class ViewHolderItem extends RecyclerView.ViewHolder implements View.OnClickListener {
        public LinearLayout container;

        public ImageView poster;

        public ViewHolderItem(View v) {
            super(v);

            container = (LinearLayout) v.findViewById(R.id.container);

            poster = (ImageView) v.findViewById(R.id.poster);
        }

        @Override
        public void onClick(View v) {
            int id = v.getId();

            if (id == R.id.container) {
                if (myAdapterListener != null) {
                    myAdapterListener.onContainerClick();
                }
            }
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        RecyclerView.ViewHolder viewHolder = null;
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());

        View v2 = inflater.inflate(R.layout.item_layout, parent, false);
        viewHolder = new ViewHolderItem(v2);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Data item = (Data) data.get(position);

        holder.poster.setImageDrawable(someDrawable);
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

}

推荐答案

删除setMyAdapter()只是将setMyAdapterListener中当前具有的参数作为recyclerview适配器构造函数的一部分传递,请参见以下内容:

Remove the setMyAdapter() just pass the arguments you currently have in your setMyAdapterListener as part of your recyclerview's adapter contructor, see below:

public MyAdapter(Context context, List<Object> data, MyAdapterListener myAdapterListener) {
        this.context = context;
        this.data = data;
        this.myAdapterListener = myAdapterListener;
    }

//在您的活动中,您必须实现界面的方法.

//On your activity you have to implement the methods of your interface.

这篇关于RecyclerView适配器自定义侦听器界面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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