RecyclerView万能适配器以及点击事件

首先是ViewHolder类,RecyclerHolder.java

public class RecycleHolder extends RecyclerView.ViewHolder {

    /** 用于存储当前item当中的View */
    private SparseArray<View> mViews;

    public RecycleHolder(View itemView) {
        super(itemView);
        mViews = new SparseArray<View>();
    }
    public <T extends View> T findView(int ViewId) {
        View view = mViews.get(ViewId);
        //集合中没有,则从item当中获取,并存入集合当中
        if (view == null) {
            view = itemView.findViewById(ViewId);
            mViews.put(ViewId, view);
        }
        return (T) view;
    }
    public RecycleHolder setText(int viewId, String text) {
        TextView tv = findView(viewId);
        tv.setText(text);
        return this;
    }
    public RecycleHolder setText(int viewId, int text) {
        TextView tv = findView(viewId);
        tv.setText(text);
        return this;
    }
    public RecycleHolder setImageResource(int viewId, int ImageId) {
        ImageView image = findView(viewId);
        image.setImageResource(ImageId);
        return this;
    }
    public RecycleHolder setImageBitmap(int viewId, Bitmap bitmap) {
        ImageView imageView= findView(viewId);
        imageView.setImageBitmap(bitmap);
        return this;
    }
    public RecycleHolder setImageNet(int viewId, String url) {
        final ImageView imageView= findView(viewId);
        //使用你所用的网络框架等,这里使用imageloader
        ImageLoader.getInstance().loadImage(url, new SimpleImageLoadingListener() {

            @Override
            public void onLoadingComplete(String imageUri, View view,Bitmap loadedImage) {
                super.onLoadingComplete(imageUri, view, loadedImage);
                imageView.setImageBitmap(loadedImage);

            }

        });
        return this;
    }
}

接下来是适配器RecyclerAdapter.java类

public abstract class RecyclerAdapter<T> extends RecyclerView.Adapter<RecycleHolder> {

    private Context mContext;
    private List<T> mDatas;
    private int mLayoutId;
    private LayoutInflater mInflater;

    private OnItemClickListener onItemClickListener;

    public RecyclerAdapter(Context mContext, List<T> mDatas, int mLayoutId) {
        this.mContext = mContext;
        this.mDatas = mDatas;
        this.mLayoutId = mLayoutId;
        mInflater = LayoutInflater.from(mContext);
    }

    @Override
    public RecycleHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new RecycleHolder(mInflater.inflate(mLayoutId, parent, false));
    }

    @Override
    public void onBindViewHolder(final RecycleHolder holder, int position) {
        convert(holder, mDatas.get(position), position);
        if (onItemClickListener != null) {
            //设置背景
            Log.i("TAG","点击");
            //holder.itemView.setBackgroundResource(R.drawable.recycler_bg);
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //注意,这里的position不要用上面参数中的position,会出现位置错乱\
                    onItemClickListener.OnItemClickListener(holder.itemView, holder.getLayoutPosition());
                }
            });
        }

    }

    public abstract void convert(RecycleHolder holder, T data, int position);

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

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void OnItemClickListener(View view, int position);
    }
}

最后是为RecyclerView设置适配器和点击事件

mainRecyclerView.setAdapter(adapter = new RecyclerAdapter<HuaBean>(MainActivity.this, huaBeanList, R.layout.item_main_recycler) {

       @Override
       public void convert(RecycleHolder holder, HuaBainListBean huaBainListBean,int position) {
           holder.setText(R.id.item_main_recycler_title, huaBainListBean.getTitle());
           holder.setText(R.id.item_main_recycler_time, huaBainListBean.getCtime());
           final String newsUrl = huaBainListBean.getUrl();
           newsUrlList.add(newsUrl);
          String picUrl = huaBainListBean.getPicUrl();
          holder.setImageNet(R.id.item_main_recycler_image,picUrl);

}
});
      adapter.setOnItemClickListener(new RecyclerAdapter.OnItemClickListener() {
          @Override
          public void OnItemClickListener(View view, int position) {
              String url=newsUrlList.get(position);
              Intent intent=new Intent(MainActivity.this,SecondActivity.class);
              intent.putExtra("chooseUrl",url);
              startActivity(intent);
           }
    });
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 RecyclerView 适配器 item 的点击事件,可以通过以下步骤实现: 1. 在 RecyclerView适配器中定义一个接口,用于回调 item 的点击事件,例如: ```kotlin interface OnItemClickListener { fun onItemClick(view: View, position: Int) } ``` 2. 在适配器中定义一个 OnItemClickListener 对象,并提供一个公共方法来设置该对象,例如: ```kotlin private var onItemClickListener: OnItemClickListener? = null fun setOnItemClickListener(listener: OnItemClickListener) { onItemClickListener = listener } ``` 3. 在 onCreateViewHolder 方法中为 itemView 设置点击事件监听器,例如: ```kotlin override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false) val viewHolder = ViewHolder(itemView) itemView.setOnClickListener { val position = viewHolder.adapterPosition if (position != RecyclerView.NO_POSITION) { onItemClickListener?.onItemClick(itemView, position) } } return viewHolder } ``` 4. 在 onBindViewHolder 方法中绑定数据,并为 itemView 设置 tag,例如: ```kotlin override fun onBindViewHolder(holder: ViewHolder, position: Int) { val currentItem = itemList[position] holder.textView.text = currentItem.text holder.itemView.tag = currentItem } ``` 5. 在 Activity 或 Fragment 中设置 OnItemClickListener,例如: ```kotlin adapter.setOnItemClickListener(object : OnItemClickListener { override fun onItemClick(view: View, position: Int) { val item = view.tag as Item // 处理点击事件 } }) ``` 这样就可以实现 RecyclerView 适配器 item 的点击事件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值