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

来源:互联网 发布:题目医院数据库 编辑:程序博客网 时间:2024/06/10 02:10

首先是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
原创粉丝点击