bus*_*lee 68 kotlin kotlin-android-extensions
我是kotlin的新人.我发现并尝试findViewById
在我的Activity
类中使用合成方法而不是烦人的方法,但我发现"如果我们想在View上调用合成属性(在适配器类中有用),我们还应该导入kotlinx.android.synthetic.main .视图.*." 但我无法弄清楚它究竟是如何起作用的?有什么例子吗?
Pet*_*hao 79
来自https://github.com/antoniolg/Kotlin-for-Android-Developers的简单示例
import kotlinx.android.synthetic.item_forecast.view.*
class ForecastListAdapter() : RecyclerView.Adapter<ForecastListAdapter.ViewHolder>() {
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bindForecast(forecast: Forecast) {
itemView.date.text = forecast.date.toDateString()
}
}
}
Run Code Online (Sandbox Code Playgroud)
不需要写
val view = itemView.findViewById(R.id.date) as TextView
view.text = forecast.date.toDateString()
Run Code Online (Sandbox Code Playgroud)
只是
itemView.date.text = forecast.date.toDateString()
Run Code Online (Sandbox Code Playgroud)
简单有效!
Dha*_*ani 27
科特林1.1.4出局
更多信息:https://antonioleiva.com/kotlin-android-extensions/
所以你需要启用它们添加到build.gradle:
apply plugin: 'org.jetbrains.kotlin.android.extensions'
androidExtensions {
experimental = true
}
Run Code Online (Sandbox Code Playgroud)
自从这个新版本的Kotlin以来,Android Extensions已经集成了一些新的有趣功能:任何类中的缓存(有趣的是包含ViewHolder)
在ViewHolder(或任何自定义类)上使用它
class ViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView),
LayoutContainer {
fun bind(title: String) {
itemTitle.text = "Hello Kotlin!"
}
}
Run Code Online (Sandbox Code Playgroud)
你需要
import kotlinx.android.synthetic.row_wall.view.*
Run Code Online (Sandbox Code Playgroud)
后来有些东西:
convertView.titleText.text = item.title
Run Code Online (Sandbox Code Playgroud)
关键是视图.*引入了View类的扩展.
尝试
class CustomViewModel(val baseView: View) {
val firstName = baseView.firstName
val lastName = baseView.lastName
}
View对象公开了视图参考:https://discuss.kotlinlang.org/t/unable-to-use-kotlin-android-extension-in-adapter-class/2890
归档时间: |
|
查看次数: |
32141 次 |
最近记录: |