在UI中绘制数据

MainActivity中的代码有些小的改动,因为现在有真实的数据需要填充到adapter中。异步调用需要被重写成:

  1. async() {
  2. val result = RequestForecastCommand("94043").execute()
  3. uiThread{
  4. forecastList.adapter = ForecastListAdapter(result)
  5. }
  6. }

Adapter也需要被修改:

  1. class ForecastListAdapter(val weekForecast: ForecastList) :
  2. RecyclerView.Adapter<ForecastListAdapter.ViewHolder>() {
  3. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
  4. ViewHolder? {
  5. return ViewHolder(TextView(parent.getContext()))
  6. }
  7. override fun onBindViewHolder(holder: ViewHolder,
  8. position: Int) {
  9. with(weekForecast.dailyForecast[position]) {
  10. holder.textView.text = "$date - $description - $high/$low"
  11. }
  12. }
  13. override fun getItemCount(): Int = weekForecast.dailyForecast.size
  14. class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
  15. }

with函数

with是一个非常有用的函数,它包含在Kotlin的标准库中。它接收一个对象和一个扩展函数作为它的参数,然后使这个对象扩展这个函数。这表示所有我们在括号中编写的代码都是作为对象(第一个参数)的一个扩展函数,我们可以就像作为this一样使用所有它的public方法和属性。当我们针对同一个对象做很多操作的时候这个非常有利于简化代码。

在这一章中有很多新的代码加入,所以检出库中的代码吧。