J'ai une mise en page suivante:
<?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>
Lorsque je veux utiliser extensions kotlin Android en dehors des activités décrites ci-dessous, cela ne fonctionne pas. J'ai fini par faire 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
Il ne tire pas les vues directement à partir de XML. Comment l'utiliser dans une mise en page programmée et éviter findViewById
?
Note: Cette question appartient strictement à Kotlin Android Extensions , pas au langage lui-même.
Edit J'ai importé les deux:
import kotlinx.Android.synthetic.main.dialog_error.view.*
import kotlinx.Android.synthetic.main.dialog_error.*
Mais Android Studio tente toujours d'importer à partir de R.id et ne reconnaît pas ces deux importations. Est-ce qu'il manque quelque chose?
Depuis le docs que vous avez lié :
Si nous voulons appeler les propriétés synthétiques sur View (utile dans les classes d’adaptateur), nous devons également importer
kotlinx.Android.synthetic.main.activity_main.view.*.
Autrement dit, importez kotlinx.Android.synthetic.main.layout.view.*
également pour charger les propriétés de l’extension View
.
Ensuite:
val view = LayoutInflater.from(context).inflate(...)
view.tvErrorTitle.text = "test"