RecyclerView —— 为 RecyclerView 添

作者: 异想天开的骑士 | 来源:发表于2017-06-19 22:10 被阅读798次

个人博客: chrongliu.cn

相关文章

RecyclerView —— RecyclerView 的基本使用
RecyclerView —— 为 RecyclerView 绘制分割线
RecyclerView —— 列表样式通用分割线

RecyclerView 是不支持点击事件的,所以需要我们自己手动去添加。

一、使用接口回调添加点击事件

我们首先要在 Adapter 中定义一个接口,然后利用接口回调的方法,将条目的位置回调出去。

/**
 * 定义一个接口
 */
public interface ItemClickListener {
    void onItemClick(int position);
}

public ItemClickListener mListener;

public void setOnItemClickListener(ItemClickListener listener) {
    this.mListener = listener;
}

然后在 onBindViewHolder 方法中,绑定事情,将条目的位置回调出去。

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
        holder.itemWord.setText(mDatas.get(position));

        if (mListener != null) {
            //绑定点击事件
            holder.itemLinear.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //把条目的位置回调回去
                    mListener.onItemClick(position);
                }
            });
        }
}

二、使用

在 Activity 中,通过我们定义好的 setOnItemClickListener 方法进行使用。

mUseAdapter.setOnItemClickListener(new BaseUseAdapter.ItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(BaseUseActivity.this, "条目位置:" + position, Toast.LENGTH_SHORT).show();
            }
});

三、Adapter 完整代码

public class BaseUseAdapter extends RecyclerView.Adapter<BaseUseAdapter.ViewHolder> {
    private Context mContext;
    private ArrayList<String> mDatas;

    public BaseUseAdapter(Context context, ArrayList<String> datas) {
        this.mContext = context;
        this.mDatas = datas;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_base_use, parent,
                false);
        ViewHolder viewholder = new ViewHolder(itemView);
        return viewholder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        holder.itemWord.setText(mDatas.get(position));

        if (mListener != null) {
            //绑定点击事件
            holder.itemLinear.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //把条目的位置回调回去
                    mListener.onItemClick(position);
                }
            });
        }

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView itemWord;
        private LinearLayout itemLinear;

        public ViewHolder(View itemView) {
            super(itemView);
            itemWord = (TextView) itemView.findViewById(R.id.tv_word);
            itemLinear = (LinearLayout) itemView.findViewById(R.id.linear_item);
        }
    }

    /**
     * 定义一个接口
     */
    public interface ItemClickListener {
        void onItemClick(int position);
    }

    public ItemClickListener mListener;

    public void setOnItemClickListener(ItemClickListener listener) {
        this.mListener = listener;
    }

}

相关文章

网友评论

    本文标题:RecyclerView —— 为 RecyclerView 添

    本文链接:https://www.haomeiwen.com/subject/fcmnqxtx.html