2017-02-24 1 views
3

Comment accéder à afficher à l'aide Kotlin l'extension synthétique si j'ai une mise en page comme ci-dessous:l'extension synthétique Kotlin et plusieurs sont même mise en page

fichier

: two_days_view.xml

<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="wrap_content" 
    android:orientation="vertical"> 

    <include 
     android:id="@+id/day1" 
     layout="@layout/day_row" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <include 
     android:id="@+id/day2" 
     layout="@layout/day_row" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 
fichier

: day_row.xml

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"  > 

     <TextView 
      android:id="@+id/dayName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

Comment accéder à dayName? Je cherchais un peu comme ceci:

day1.dayName.text = "xxx" 
day2.dayName.text = "sss" 

Je vois en studio que j'ai accès à dayName mais dont l'un des NomJour TextView est fait référence à?

Normal si je n'ai qu'une seule disposition incluse, cela fonctionne correctement. Mais maintenant j'ai plusieurs fois inclus la même mise en page.

bien sûr je peux toujours faire:

day1.findViewById(R.id.dayName).text = "xxx" 

mais je suis à la recherche d'une solution agréable. :)

Répondre

9

En règle générale, vous ne devriez pas construire de mises en page qui finissent par avoir plusieurs vues avec le même identifiant - pour cette raison même.

Mais, pour résoudre votre problème: Au lieu d'importer

kotlinx.android.synthetic.main.layout.day_row.*

vous pouvez importer

kotlinx.android.synthetic.main.layout.day_row.view.* (Notez le .view supplémentaire à la fin).

Cela importera les vues non pas en tant que propriétés au niveau Activité/Fragment, mais en tant que propriétés d'extension pour View. De cette façon, vous pouvez le faire de la façon dont vous voulez, en supposant que day1 et day2 contiennent les vues que vous souhaitez:

day1.dayName.text = "xxx" 
day2.dayName.text = "sss" 
+1

thx il wokrs. BTW: pouvez-vous expliquer pourquoi ne devrait pas construire des dispositions de cette façon? Si j'ai fixé 7 lignes identiques? Pourquoi devrais-je faire un énorme xml avec le nom du jour des noms (1..7) et ainsi de suite. Y a-t-il des moyens différents pour éviter les énormes xml? – LunaVulpo

+0

@LunaVulpo C'était plus un "disclaimer" de mon côté. Je pense que dans votre cas, avec un ensemble fixe de mises en page identiques, c'est probablement justifié, mais dans de nombreux cas, d'autres solutions pourraient être mieux adaptées, comme faire de la mise en page un fragment ou une vue personnalisée. Je me rends compte que c'est techniquement toujours mettre des vues avec les mêmes identifiants dans la même mise en page, mais de cette façon, ils sont clairement séparés dans le code. – Robin

+0

@ Hikaaru755 ok. THX :) – LunaVulpo