Colección de extensiones de Kotlin para facilitar el trabajo con actividades, iniciar activades en Android de forma más eficaz y simple.
Como abrir una actividad usando modo tradicional
Lanzar actividades en aplicaciones de Android es una tarea común, se puede usar la forma trandicional para crear empaquetados con Intent y asignarlos a un método de startActivity()
val intent = Intent(this, SecondActivity::class)
startActivity(intent)
Usando extensiones de Kotlin
Trabajar con actividades usando extensiones de Kotlin
/**
* Kotlin Extensions for simpler, easier and funw way
* of launching of Activities
*/
inline fun <reified T : Any> Activity.launchActivity (
requestCode: Int = -1,
options: Bundle? = null,
noinline init: Intent.() -> Unit = {})
{
val intent = newIntent<T>(this)
intent.init()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
startActivityForResult(intent, requestCode, options)
} else {
startActivityForResult(intent, requestCode)
}
}
inline fun <reified T : Any> Context.launchActivity (
options: Bundle? = null,
noinline init: Intent.() -> Unit = {})
{
val intent = newIntent<T>(this)
intent.init()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
startActivity(intent, options)
} else {
startActivity(intent)
}
}
inline fun <reified T : Any> newIntent(context: Context): Intent =
Intent(context, T::class.java)
Su uso
// Actividades simples
launchActivity<UserDetailActivity>()
// Añadiendo datos con Intent extras
launchActivity<UserDetailActivity> {
putExtra(INTENT_USER_ID, user.id)
}
// Personalizar con banderas
launchActivity<UserDetailActivity> {
putExtra(INTENT_USER_ID, user.id)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
}
// Soporte de Transiciones compartidas
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, avatar, "avatar")
launchActivity<UserDetailActivity>(options = options) {
putExtra(INTENT_USER_ID, user.id)
}
// Soporte de retorno de código requestCode usando llamada a startActivityForResult()
launchActivity<UserDetailActivity>(requestCode = 1234) {
putExtra(INTENT_USER_ID, user.id)
}