美文网首页
?. 和 ?: 和 let 和 with和 解构声明 使用说明

?. 和 ?: 和 let 和 with和 解构声明 使用说明

作者: 萍水相逢_程序员 | 来源:发表于2018-10-18 16:02 被阅读0次
    class MyAdapter : RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    
        var mList: ArrayList<ArticleBean>? = null;
        var mContext: Context
    
        constructor(mContext: Context, list: ArrayList<ArticleBean>) {
    
            this.mContext = mContext
            mList = list;
        }
    
        override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyViewHolder {
    
            return MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.article_recycle_item, parent, false))
        }
    
        override fun getItemCount(): Int {
            //取java xxx ? xxx : xxx 三目运算符
            // 提供了对象A ?: 对象B 表达式 表示当对象A的值为null的时候,就返回后面的对象B
            //?.表示mList不为null的时候,执行size方法
            return mList?.size ?: 0
        }
    
        override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    
            holder.setData(mList?.get(position))
            holder.itemView.setOnClickListener {
            }
        }
    
        class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    
            var ivImage: ImageView = itemView.findViewById(R.id.ivImage)
            var tvTitle: TextView = itemView.findViewById(R.id.tvTitle)
            var tvTime: TextView = itemView.findViewById(R.id.tvTime)
    
            fun setData(item: ArticleBean?) {
    //            直接参用java非空判断
    //            if (item != null) {
    //                val (_, imageUrl, title, time, _) = item
    //                val options = RequestOptions()
    //                        .centerCrop()
    //                        .placeholder(R.mipmap.ic_launcher)
    //                        .error(R.mipmap.ic_launcher)
    //                        .priority(Priority.HIGH)
    //
    //                Glide.with(itemView.context)
    //                        .load(imageUrl)
    //                        .transition(DrawableTransitionOptions())
    //                        .apply(options)
    //                        .into(ivImage)
    //                tvTitle.text = title;
    //                tvTime.text = time
    //            }
    
    //            if (item != null) {
    //
    //                //适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可
    //             数据model的属性映射到UI上
    //                with(item){
    //                    val options = RequestOptions()
    //                            .centerCrop()
    //                            .placeholder(R.mipmap.ic_launcher)
    //                            .error(R.mipmap.ic_launcher)
    //                            .priority(Priority.HIGH)
    //
    //                    Glide.with(itemView.context)
    //                            .load(imageUrl)
    //                            .transition(DrawableTransitionOptions())
    //                            .apply(options)
    //                            .into(ivImage)
    //                    tvTitle.text = title;
    //                    tvTime.text = time
    //                }
    //            }
    
                //let函数的说明
                //1 使用let函数处理需要针对一个可null的对象统一做判空处理
                //2 然后就是需要去明确一个变量所处特定的作用域范围内可以使用
                item?.let {
                    //解构声明 有时把一个数据类 解构成很多变量会很方便
                    //解构声明的参数 与数据类的主构造函数对应,不需要的变量使用下划线取代其名称
                    //返回多个函数可以用 返回数据类,之后用解构声明获取
                    val (_, imageUrl, title, time, _) = it
                    val options = RequestOptions()
                            .centerCrop()
                            .placeholder(R.mipmap.ic_launcher)
                            .error(R.mipmap.ic_launcher)
                            .priority(Priority.HIGH)
    
                    Glide.with(itemView.context)
                            .load(imageUrl)
                            .transition(DrawableTransitionOptions())
                            .apply(options)
                            .into(ivImage)
                    tvTitle.text = title;
                    tvTime.text = time
    
                }
    
    //            item?.let {
    //                val options = RequestOptions()
    //                        .centerCrop()
    //                        .placeholder(R.mipmap.ic_launcher)
    //                        .error(R.mipmap.ic_launcher)
    //                        .priority(Priority.HIGH)
    //
    //                Glide.with(itemView.context)
    //                        .load(it.imageUrl)
    //                        .transition(DrawableTransitionOptions())
    //                        .apply(options)
    //                        .into(ivImage)
    //                tvTitle.text = it.title;
    //                tvTime.text = it.time
    //            }
    
    
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:?. 和 ?: 和 let 和 with和 解构声明 使用说明

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