Ekstensi Android Kotlin tidak digunakan lagi. Apa yang harus dilakukan? Petunjuk migrasi

Anda mungkin pernah mendengar bahwa plugin Kotlin Android Extensions untuk Kotlin sekarang sudah tidak digunakan lagi.

kotlinx.android.synthetic tidak lagi menjadi praktik yang direkomendasikan. Menghapus demi findViewById eksplisit


Tentu saja, ini sangat nyaman, terutama jika Anda memiliki proyek sepenuhnya di Kotlin. Namun, dunia sedang berubah dan sekarang kita perlu mencari alternatif. Pada artikel ini, kita akan melihat sekilas tentang apa itu plugin Kotlin Android Extension, apa masalahnya, dan sekarang apa yang harus kita, pengembang Android, lakukan. Sebagian, materi dalam artikel ini digunakan . Jadi ayo pergi.



Sekilas tentang Kotlin Android Extensions



Kotlin Android Extensions adalah plugin Kotlin yang memungkinkan Anda memulihkan tampilan dari Aktivitas, Fragmen, dan Tampilan tanpa menulis kode boilerplate standar seperti findViewById.

Plugin menghasilkan kode tambahan yang memungkinkan Anda untuk mengakses tampilan sebagai XML, sama seperti jika Anda berurusan dengan properti bernama id yang Anda gunakan saat menentukan struktur.



Ini juga membuat cache tampilan lokal. Pertama kali Anda menggunakan properti, plugin akan menjalankan findViewById default. Selanjutnya, tampilan akan dikembalikan dari cache, sehingga aksesnya akan lebih cepat.



Jika semuanya sangat nyaman, lalu mengapa tidak digunakan lagi?



Masalah Ekstensi Android Kotlin



  • . , view — , id.
  • Kotlin ()
  • Null Safety. , view — , .
  • . : UI Kit, UI-, . issues . findViewById :(
  • , , — , , . — Kotlin Android Extensions .




  • KotterKnife (, ).
  • FindViewById() — , .
  • AndroidAnnotations ( 2015)
  • View Binding Google — !


View Binding Google



Jadi pemenang dalam daftar ini adalah Google ViewBinding (jangan bingung dengan DataBinding). Mari kita lihat sekilas apa itu.



View Binding adalah alat yang memudahkan penulisan kode untuk berinteraksi dengan tampilan. Saat Anda mengaktifkan View Binding di modul tertentu, ini menghasilkan class binding untuk setiap file tata letak dalam modul. Objek dari class binding yang dihasilkan berisi link ke semua tampilan dari file markup yang telah ditentukan android: id.



Keuntungan utama View Binding adalah keamanan Null dan keamanan Jenis.



Memulai View Binding



Memulai ViewBinding cukup mudah. Anda perlu menambahkan opsi untuk build.gradle:



android {
    ...
    buildFeatures {
        viewBinding true
    }
}


Setelah itu, Anda sudah bisa menggunakannya. Setiap kelas binding yang dihasilkan berisi link ke tampilan root markup (root) dan link ke semua tampilan yang memiliki id. Nama kelas yang dihasilkan dibentuk sebagai "nama file markup" diterjemahkan ke dalam kasus unta + "Binding". Misalnya, untuk file markup result_profile.xml:



<LinearLayout ... >
    <TextView android:id="@+id/name" />
    <ImageView android:cropToPadding="true" />
    <Button android:id="@+id/button"
        android:background="@drawable/rounded_button" />
</LinearLayout>


Kelas ResultProfileBinding akan dibuat yang berisi 2 bidang: nama TextView dan tombol Tombol.



Gunakan dalam Aktivitas



Misalnya, Anda memiliki tata letak ini:



<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>


Hasil dari ViewBinding:



public final class ActivityMainBinding implements ViewBinding {
  @NonNull
  private final ConstraintLayout rootView;

  @NonNull
  public final TextView textView;


Anda dapat menggunakan viewBinding seperti ini:



private lateinit var binding: ResultProfileBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ResultProfileBinding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view)
}


Dan sekarang, setelah kami mendapatkan tautan ke tampilan:



binding.name.text = viewModel.name
binding.button.setOnClickListener { viewModel.userClicked() }


Jika Anda menggunakan ViewBinding dalam sebuah fragmen dan menyimpan tautan ke pengikatan dalam fragmen (dan tidak hanya dalam metode onCreateView ()), jangan lupa untuk menghapus tautan dalam metode onDestroyView ().



Contoh:



private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    _binding = ResultProfileBinding.inflate(inflater, container, false)
    val view = binding.root
    return view
}

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}


Ini harus dilakukan karena fragmen dan siklus hidup tampilan:



gambar



Secara umum, beralih ke ViewBinding tidaklah cukup sulit, meskipun sayang sekali bahwa Ekstensi Android Kotlin tidak digunakan lagi. Jangan lupa untuk bergabung dengan kami di Telegram , dan materi berguna untuk pengembang Android dan tutorial modern dipublikasikan di platform AndroidSchool.ru .



Link yang berguna:






All Articles