美文网首页
RecycleView 项目中优化处理

RecycleView 项目中优化处理

作者: wervy | 来源:发表于2019-12-24 10:47 被阅读0次

    RecycleView 我们在Android项目中经常使用,adapter一般我们是这么写的:显示新建一个Adapter类继承 RecyclerView.Adapter,然后
    再写一个ViewHolder类继承RecyclerView.ViewHolder类

    class JcActivityListAdapter(context: Context, list: List<JCActivityBean>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    
        var context = context
        var list = list
          lateinit var disposable: Disposable
        override fun getItemViewType(position: Int): Int {
    
            return if (position == 0) {
                ActivityConstant.TYPE_HEADER_VIEW
            } else {
                ActivityConstant.TYPE_NORMAL_VIEW
            }
        }
    
        override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
    
            if (viewType == ActivityConstant.TYPE_HEADER_VIEW) {
                var headView = LayoutInflater.from(context).inflate(R.layout.group_buy_activity_head_layout, parent, false)
                return HeaderHolder(headView)
            } else {
    
                var view = LayoutInflater.from(context).inflate(R.layout.jc_activity_list_item_layout, parent, false)
                return ListHolder(view)
            }
        }
    
        override fun getItemCount(): Int {
            return list.size
        }
    
        override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
       ...........省略业务代码
        }
    
        inner class ListHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
            var image = itemView.findViewById(R.id.image) as SimpleDraweeView
            ...........省略业务代码
        }
    
        inner class HeaderHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    
        }
    }
    

    这样的话,我们就会发现每次都要新建一个ViewHolder继承 RecyclerView.ViewHolder的匿名内部类,很是繁琐,

    我们可以写一个公共ViewHolder类,把布局文件作为参数传进去 代码如下:
    public class CustomViewHolder extends RecyclerView.ViewHolder {
    
        private SparseArray<View> views;
        private View rootView;
    
        public CustomViewHolder(View itemView) {
            super(itemView);
            views = new SparseArray<>();
            this.rootView = itemView;
        }
    
        public static CustomViewHolder createViewHolder(Context context, ViewGroup parent, int resource) {
    
            View rootView = LayoutInflater.from(context).inflate(resource, parent, false);
            CustomViewHolder customViewHolder = new CustomViewHolder(rootView);
            return customViewHolder;
        }
        public View getRootView() {
            return rootView;
        }
    
        public <T extends View> T getView(int resource) {
    
            View view = views.get(resource);
            if (view == null) {
    
                view = rootView.findViewById(resource);
                views.put(resource, view);
            }
    
            return (T) view;
        }
    
    }
    

    使用方式如下:

    class DcGoodsListAdapter(context: Context,list: MutableList<CommdityBean>): RecyclerView.Adapter<CustomViewHolder>() {
    
    
        var context = context
        var list = list
    
        override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): CustomViewHolder {
    
            return CustomViewHolder.createViewHolder(parent?.context,parent, R.layout.dc_goods_item_layout)
    
        }
    
        override fun getItemCount(): Int {
    
            return list.size
        }
    
        override fun onBindViewHolder(holder: CustomViewHolder?, position: Int) {
    
            (holder?.getView(R.id.commodity_name)as TextView).text = list[position].commodity_name
        //业务代码省略
        }
    
    
    }
    

    相关文章

      网友评论

          本文标题:RecycleView 项目中优化处理

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