-

Android KTX

O Android KTX é um conjunto de extensões do Kotlin que faz parte da família Android Jetpack. Ele otimiza as APIs do Jetpack e da plataforma Android para uso no Kotlin. O objetivo do Android KTX é tornar o desenvolvimento de Android com o Kotlin mais conciso, agradável e idiomático aproveitando recursos da linguagem Kotlin, como funções/propriedades de extensão, lambdas, parâmetros nomeados e valores padrão de parâmetro. O Android KTX não adiciona novos recursos às APIs do Android já existentes.

Para saber mais sobre o Android KTX, veja nosso vídeo do DevBytes.

Primeiros passos

Para começar a usar o Android KTX, adicione o seguinte ao arquivo build.gradle do seu projeto:

repositories {
    google()
}

O Android KTX é organizado em módulos. Cada módulo contém um ou mais pacotes.

Ao usar um módulo, inclua uma dependência para cada artefato do Android KTX no arquivo build.gradle do seu app. Lembre-se de anexar a versão ao artefato. Por exemplo, se você usar o módulo core-ktx, a dependência formada por completo ficará da seguinte forma:

dependencies {
    implementation 'androidx.core:core-ktx:1.0.0-alpha1'
}

Módulos

O Android KTX é composto por estes artefatos do Maven. Para ver a documentação de referência da API, clique no nome do pacote específico e consulte o resumo de funções de extensão.

Módulo (artefato) Versão Pacote
androidx.core:core-ktx 1.0.0-alpha1 Veja todos os pacotes principais abaixo.
androidx.fragment:fragment-ktx 1.0.0-alpha1 androidx.fragment.app
androidx.palette:palette-ktx 1.0.0-alpha1 androidx.palette.graphics
androidx.sqlite:sqlite-ktx 1.0.0-alpha1 androidx.sqlite.db
androidx.collection:collection-ktx 1.0.0-alpha1 androidx.collection
androidx.lifecycle:lifecycle-viewmodel-ktx 2.0.0-alpha1 androidx.lifecycle
androidx.lifecycle:lifecycle-reactivestreams-ktx 2.0.0-alpha1 androidx.lifecycle
android.arch.navigation:navigation-common-ktx 1.0.0-alpha01 androidx.navigation
android.arch.navigation:navigation-fragment-ktx 1.0.0-alpha01 androidx.navigation.fragment
android.arch.navigation:navigation-runtime-ktx 1.0.0-alpha01 androidx.navigation
android.arch.navigation:navigation-testing-ktx 1.0.0-alpha01 androidx.navigation.testing
android.arch.navigation:navigation-ui-ktx 1.0.0-alpha01 androidx.navigation.ui
android.arch.work:work-runtime-ktx 1.0.0-alpha01 androidx.work.ktx

O módulo principal inclui os seguintes pacotes:

Exemplos

O Android KTX é um componente básico do Android Jetpack. Veja como ele funciona no app de demonstração Sunflower.

Os exemplos abaixo demonstram algumas das funções de extensão do Android KTX. Elas são agrupadas por nome de módulo (artefato). Veja a documentação de referência completa do pacote para encontrar a lista integral de funções de extensão.

androidx.core:core-ktx

Kotlin

sharedPreferences.edit()
    .putBoolean("key", value)
    .apply()

Kotlin + Android KTX

sharedPreferences.edit {
    putBoolean("key", value)
}

Kotlin

view.viewTreeObserver.addOnPreDrawListener(
    object : ViewTreeObserver.OnPreDrawListener {
        override fun onPreDraw(): Boolean {
            viewTreeObserver.removeOnPreDrawListener(this)
            actionToBeTriggered()
            return true
        }
    }
)

Kotlin + Android KTX

view.doOnPreDraw {
     actionToBeTriggered()
}

androidx.sqlite:sqlite-ktx

Kotlin

db.beginTransaction()
try {
    // insert data
    db.setTransactionSuccessful()
} finally {
    db.endTransaction()
}

Kotlin + Android KTX

db.transaction {
    // insert data
}

androidx.fragment:fragment-ktx

Kotlin

supportFragmentManager
    .beginTransaction()
    .replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
    .commitAllowingStateLoss()

Kotlin + Android KTX

supportFragmentManager.transaction(allowStateLoss = true) {
            replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
        }

Feedback

O Android KTX está em versão Alfa atualmente. Continuaremos adicionando novas extensões Kotlin a todo o Jetpack, e seu feedback será muito bem-vindo. Se você quiser informar um problema ou sugerir um recurso, registre um novo problema no Issue Tracker do Android KTX.