Pertanyaan Tata letak terprogram terprogram dengan Ekstensi Android Kotlin


Saya memiliki tata letak berikut:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@android:color/white"
    android:paddingLeft="20dp"
    android:paddingRight="20dp">

    <TextView
        android:id="@+id/tvErrorTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textColor="@android:color/background_dark"
        android:textSize="18sp"
        />
    <TextView
        android:id="@+id/tvErrorDesc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:textColor="@android:color/darker_gray"
        android:textSize="16sp"
        />
    <TextView
        android:id="@+id/tvAction"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="10dp"
        android:layout_gravity="end"
        android:padding="5dp"
        android:textSize="15sp"
        android:textStyle="bold"
        android:textAllCaps="true"
        android:textColor="@android:color/holo_purple"
        />
</LinearLayout>

Ketika saya ingin menggunakannya ekstensi Android kotlin di luar aktivitas seperti di bawah ini, itu tidak berhasil. Saya akhirnya melakukan findViewById.

...
...
import kotlinx.android.synthetic.main.dialog_error.*
...
...
 val view = LayoutInflater.from(context).inflate(R.layout.dialog_error, null, false)
    val tvErrorTitle = view.findViewById(R.id.tvErrorTitle) as TextView
    val tvErrorDesc = view.findViewById(R.id.tvErrorDesc) as TextView
    val tvErrorAction = view.findViewById(R.id.tvAction) as TextView

Itu tidak menarik pandangan langsung dari xml. Cara menggunakannya dalam tata letak yang terprogram secara teknis dan hindari findViewById?

Catatan : Pertanyaan ini benar-benar milik Ekstensi Android Kotlin, bukan bahasa itu sendiri.

Edit Saya telah mengimpor keduanya:

import kotlinx.android.synthetic.main.dialog_error.view.*
import kotlinx.android.synthetic.main.dialog_error.*

Tetapi Android Studio masih mencoba mengimpor dari R.id dan tidak mengenali kedua impor tersebut. Apakah ada yang hilang?


5
2018-06-25 16:30


asal


Jawaban:


Dari dokumen yang Anda tautkan:

Jika kita ingin memanggil properti sintetis pada View (berguna dalam kelas adaptor), kita juga harus mengimpor

kotlinx.android.synthetic.main.activity_main.view.*.

Yaitu, impor kotlinx.android.synthetic.main.layout.view.* juga untuk memuat View properti ekstensi.

Kemudian:

val view = LayoutInflater.from(context).inflate(...)
view.tvErrorTitle.text = "test"

16
2018-06-25 16:40