Kotlin for Android Developers


 Click listener for ForecastListAdapter


Download 1.04 Mb.
Pdf ko'rish
bet35/79
Sana18.06.2023
Hajmi1.04 Mb.
#1588404
1   ...   31   32   33   34   35   36   37   38   ...   79
Bog'liq
Kotlin for Android Developers Learn Kotlin the Easy Way While Developing an Android App ( PDFDrive )

13.2 Click listener for ForecastListAdapter
In the previous chapter, I wrote the click listener the hard way on purpose to have a good context
to develop this one. But now it’s time to put what you learnt into practice. We are removing the
listener interface from the
ForecastListAdapter
and using a lambda instead:
1
public class ForecastListAdapter(val weekForecast: ForecastList,
2
val itemClick: (Forecast) -> Unit)
The function will receive a forecast and return nothing. The same change can be done to the
ViewHolder
:


13 Lambdas
48
1
class ViewHolder(view: View, val itemClick: (Forecast) -> Unit)
The rest of the code remains unmodified. Just a last change to
MainActivity
:
1
val adapter = ForecastListAdapter(result) { forecast -> toast(forecast.date) }
We can simplify the last line even more. In functions that only need one parameter, we can make
use of the it reference, which prevents us from defining the left part of the function specifically. So
we can do:
1
val adapter = ForecastListAdapter(result) { toast(it.date) }
13.3 Extending the language
Thanks to these transformations, we can create our own builders and code blocks. We’ve already
been using some interesting functions such as
with
. A simpler implementation would be:
1
inline fun  with(t: T, body: T.() -> Unit) { t.body() }
This function gets an object of type
T
and a function that will be used as an extension function. The
implementation just takes the object and lets it execute the function. As the second parameter of the
function is another function, it can be brought out of the parentheses, so we can create a block of
code where we can use
this
and the public properties and functions of the object directly:
1
with(forecast) {
2
Picasso.with(itemView.ctx).load(iconUrl).into(iconView)
3
dateView.text = date
4
descriptionView.text = description
5
maxTemperatureView.text = "$high"
6
minTemperatureView.text = "$low"
7
itemView.setOnClickListener { itemClick(this) }
8
}

Download 1.04 Mb.

Do'stlaringiz bilan baham:
1   ...   31   32   33   34   35   36   37   38   ...   79




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling