Use Kotlin-extensions - todo-mvp-kotlin
I want to add kotlin-extensions to reduce the code, and keep it mutch simple.
Background: Kotlin Android Extensions (a.k.a. kotlinx.android.synthetic) used to let you access views directly by their XML IDs without calling findViewById(). However, Google deprecated this feature in Kotlin 1.4.20 and recommends View Binding instead.
Original (Before Kotlin Extensions)
class TaskDetailActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.task_detail_act)
val titleTextView = findViewById<TextView>(R.id.task_detail_title)
val descriptionTextView = findViewById<TextView>(R.id.task_detail_description)
titleTextView.text = "My Task"
descriptionTextView.text = "This is the description"
}
} With Kotlin Extensions (Deprecated)
import kotlinx.android.synthetic.main.task_detail_act.*
class TaskDetailActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.task_detail_act)
task_detail_title.text = "My Task"
task_detail_description.text = "This is the description"
}
} No findViewById, views are available directly by ID.
Modern Alternative — View Binding
class TaskDetailActivity : AppCompatActivity() { private lateinit var binding: TaskDetailActBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = TaskDetailActBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.taskDetailTitle.text = "My Task"
binding.taskDetailDescription.text = "This is the description"
}
} Safe (null-safety, type-safety)
Works in fragments, adapters, etc.
Officially supported and maintained.
Recommendation for the todo-mvp-kotlin repo If the intention is just to simplify UI code:
Back in 2018 → Kotlin Android Extensions was a good choice for less boilerplate.
Now → Replace with View Binding for a future-proof approach, since Kotlin Extensions are deprecated.