Kicsit regen blogoltam, par eve abbahagytam, de megint nekikezdtem, valahogy jo erzes. Minden fele uj dologrol fogok irni megint, ami tetszik/nem tetszik. Lassunk egy kis kotlint.
Kotlin extensions!
Nezzunk egy peldat ra. Keszitesz egy extensions.kt nevu filet androidon, majd belerakod ezt
fun String.formatDate(): String {
val fromFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
val toFormat = SimpleDateFormat("yyyy.MM.dd HH:mm", Locale.US)
val date = fromFormat.parse(this)
return toFormat.format(date).toString()
}
private fun EditText.afterTextChanged(afterTextChanged: (String) -> Unit) {
this.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(editable: Editable?) {
afterTextChanged.invoke(editable.toString())
}
})
}
Ezek utan lesz egy shortcut method-od a String-re, vagy az EditText-re. (Extension)
Logger.E("2018-01-01 11:22:35".formatDate())
return: "2018.01.01 11:22"
Hat nem gyonyoru?
Vagy pl az apply, with
fun openNewIntent(c: Context, clazz: Class<*>) {
val intent = Intent(c, clazz).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP }
c.startActivity(intent)
}
with(Akarmi) {
method1()
method2()
akarmi = vmi
}
singleton
object SomeSingleton {
init {
println("init complete")
}
}
lazy
companion object {
val instance: GitHubService by lazy {
val retrofit = Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build()
retrofit.create(GitHubService::class.java)
}
}
say goodbye to findviewbyid!!!
ugyan erre tobb megoldas is szuletett mar, butterknife, databinding, etc..
de itt van nekunk a kotlinos extension "synthetic" verzio
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
van egy layoutod ugye, amiben van egy textview egy id-vel
<TextView
android:id="@+id/welcomeMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Hello World!"/>
MainActivityben egyszeruen meghivjuk:
welcomeMessage.text = "Hello Kotlin!"
hogy hasznalni tudjuk, egyszeruen importaljuk be:
welcomeMessage.text = "Hello Kotlin!"
hogy hasznalni tudjuk, egyszeruen importaljuk be:
import kotlinx.android.synthetic.main.activity_main.*
Bovebben:
https://antonioleiva.com/kotlin-android-extensions/