Migracja z materiałów syntetycznych Kotlin do powiązania widoku Jetpack

Rozszerzenia Kotlin na Androida zostały wycofane, co oznacza, że do wiązania widoków nie można już używać syntetyki Kotlin. Jeśli Twoja aplikacja wykorzystuje syntetyczne Kotlin do wiązania widoków, skorzystaj z tego przewodnika, aby przejść do powiązania widoku Jetpack.

Jeśli Twoja aplikacja nie wykorzystuje jeszcze technologii syntetycznej Kotlin do wiązania widoków danych, zapoznaj się z sekcją Powiązanie widoku, aby uzyskać podstawowe informacje o wykorzystaniu.

Aktualizowanie pliku Gradle

Podobnie jak w przypadku rozszerzeń na Androida, wiązanie widoku Jetpack jest włączone na podstawie poszczególnych modułów. W przypadku każdego modułu, który używa powiązania widoku, ustaw opcję kompilacji viewBinding na true w pliku build.gradle na poziomie modułu:

Odlotowy

android {
    ...
    buildFeatures {
        viewBinding true
    }
}

Kotlin

android {
    ...
    buildFeatures {
        viewBinding = true
    }
}

Jeśli Twoja aplikacja nie korzysta z funkcji Parcelable, usuń wiersz włączający rozszerzenia Kotlin na Androida:

Odlotowy

plugins {
  id 'kotlin-android-extensions'
}

Kotlin

plugins {
    kotlin("android.extensions")
}

Więcej informacji o włączaniu powiązania widoków w module znajdziesz w instrukcjach konfiguracji.

Aktualizowanie klas aktywności i fragmentów

W przypadku powiązania widoku Jetpack klasa powiązania jest generowana dla każdego pliku układu XML zawartego w module. Nazwa tej klasy powiązania to nazwa pliku XML (w przypadku formatu Pascal) ze słowem Binding dodanym na końcu. Jeśli np. nazwa pliku szablonu to result_profile.xml, nazwa wygenerowanej klasy powiązania to ResultProfileBinding.

Aby odwoływać się do widoków za pomocą wygenerowanych klas wiązań zamiast właściwości syntetycznych, zmień klasy aktywności i fragmentów, wykonując te czynności:

  1. Usuń wszystkie importy z: kotlinx.android.synthetic.

  2. Wzmocnij instancję wygenerowanej klasy powiązania dla działania lub fragmentu do użycia.

  3. Zmień wszystkie odwołania do widoku, aby używać instancji klasy powiązania zamiast właściwości syntetycznych:

// Reference to "name" TextView using synthetic properties.
name.text = viewModel.nameString

// Reference to "name" TextView using the binding class instance.
binding.name.text = viewModel.nameString

Więcej informacji znajdziesz w sekcji Użycie w przewodniku po wiązaniach widoków.