Tout d'abord, désolé pour mon pauvre anglais
J'ai une vue de recyclage avec une mise en page XML comme celle-ci
<layout 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"> <data> <variable name="township" type="com.test.feature.Area" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="horizontal" android:paddingTop="@dimen/_10sdp" android:paddingBottom="@dimen/_10sdp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{township.name}" android:textColor="@color/agent_list_gray_1" android:textSize="@dimen/_15ssp" /> <android.support.v7.widget.AppCompatRadioButton android:id="@+id/btnRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0"/> </LinearLayout>
J'ai défini le texte sur la vue de texte dans la classe Adapter, et c'est ce que je veux ce que je veux
Mais si j'utilise la liaison de données avec ceci ligne à la place
android: text = "@ {township.name}"
J'ai ceci layout_weight est incorrect
Quelqu'un sait-il ce qui ne va pas avec mon code?
Il existe d'autres moyens d'archiver ce type d'interface utilisateur, mais je veux vraiment savoir pourquoi cela ne fonctionnera pas
3 Réponses :
N'avez-vous pas pu utiliser RelativeLayout et définir Textview sur parentLeft et EditTextview sur parentRight pour l'espacement?
cela fonctionnera probablement, mais je veux simplement savoir pourquoi layout_weight ne fonctionne pas avec la liaison de données
C'est bizarre! parce que j'ai implémenté votre code et cela a fonctionné. Essayez peut-être de l'encapsuler dans une vue parent comme ci-dessous (je l'ai fait de cette façon):
<android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/backgroundOrange" android:orientation="horizontal" android:paddingTop="@dimen/_10sdp" android:paddingBottom="@dimen/_10sdp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{township.name}" android:textColor="@color/textPrimary" android:textSize="15dp"/> <android.support.v7.widget.AppCompatRadioButton android:id="@+id/btnRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
Faites-moi savoir si cela a fonctionné.
Je l'ai enveloppé avec constraintLayout comme ci-dessus et cela ne fonctionne toujours pas pour moi. Utilisez-vous la liaison de données pour lier le texte?
@ user2558303 Ouais! J'ai utilisé un ObservableField
pour lier les données à afficher. Peut-être que le fait que vous l'utilisiez sur une liste est à l'origine du problème.
La solution est simple.
Lorsque vous gonflez votre mise en page si votre mise en page se trouve dans une autre mise en page, passez la mise en page de conteneur en tant que parent dans la méthode gonflée.
Si vous ne le faites pas , tous les attributs commençant par layout
ne fonctionneront pas.
Votre code de gonflage devrait ressembler à ceci.
binding = FragmentTestBinding.inflate(layoutInflator,parent,false)
Avez-vous résolu ce problème s'il vous plaît?