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

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
//            }


        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容