5.0 操作符重载

简化前面的的天气列表的例子,在ForecastList.kt这个类中,实现一个get方法,还有一个size方法:

data class ForecastList(val city: String, val country: String, val dailyForecast: List<com.kavenka.testkotlin.domain.Forecast>) {
    operator fun get(position: Int): Forecast = dailyForecast[position]
    fun size(): Int = dailyForecast.size
}

然后在我们的adapter类中,我们可以写得更简单一点

class ForecastListAdapter(val weekForecast: ForecastList) : RecyclerView.Adapter<ForecastListAdapter.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(TextView(parent.getContext()))
    }
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//        with(weekForecast.dailyForecast[position]) {
//            holder.textView.text = "$date - $description - $high/$low"
//        }
        with(weekForecast[position]) {
            holder.textView.text = "$date - $description - $high/$low"
        }
    }
//    override fun getItemCount(): Int = weekForecast.dailyForecast.size
    override fun getItemCount(): Int = weekForecast.size()
    class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
}

将dailyForecast的每一项对应的赋值给ForecastList,在外部访问ForecastList的item时,实际获取的是dailyForecast的item。size方法也是一样。

扩展函数的操作符

定义ViewGroup的扩展函数get,使其可以直接访问ViewGroup中的子view

operator fun ViewGroup.get(position: Int): View = getChildAt(position)

现在真的可以非常简单地从一个 ViewGroup 中通过position得到一个view

val container: ViewGroup = find(R.id.container)
val view = container[2]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,288评论 25 708
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,880评论 1 10
  • “何以解忧,唯有暴富”,那你暴富之后呢? 我曾经做过中奖5千万的白日梦(5千万对于我来说已经很多了,贫穷限制了我的...
    歌踏月_1阅读 361评论 0 0
  • 我喜欢唐代诗人黄巢的《菊花》。 “待到秋来九月八,我花开后百花杀。” “冲天香阵透长安,满城尽带黄金甲。” ...
    乐悠悠的马彬阅读 248评论 0 9
  • 最近我们这里来了个马戏团,为了让人们知道后观看,每天这个小工具车拉着这个老虎在主街道 上走几回。 ...
    纷飞的落叶阅读 367评论 0 0