J'essaie de jouer avec le nouveau ConstraintLayout. J'ai créé la mise en page de la ligne de mon RecyclerView. L'élément racine est un ConstraintLayout dont la largeur est définie sur match_parent
et lorsque j'exécute mon application, le rendu est conforme à ce qui était prévu.
Cela fonctionne bien jusqu'à ce que je mette une section de liaison de données dans mon XML et que l'élément Root soit dorénavant layout
qui englobe le ConstraintLayout, ce qui entraîne un changement imprévisible du comportement du ConstraintLayout - sa largeur n'est désormais pas rendue comme suit match_parent
il ne prend qu'une petite partie de la largeur d'affichage, bien qu'il soit toujours réglé sur match_parent
en XML. J'ai également essayé de définir la largeur à une valeur fixe et le résultat est le même.
Je soupçonne que le processeur de liaison de données supprime en quelque sorte les attributs de ConstrainLayout lors du traitement des mises en page pendant le processus de construction. Existe-t-il un moyen de faire fonctionner les choses correctement ? Ma mise en page
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
<variable
name="post"
type=".entity.Post"/>
<variable
name="data"
type=".entity.LinkPostData"/>
</data>
<android.support.constraint.ConstraintLayout
android:id="@+id/constraintLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="16dp">
....
</android.support.constraint.ConstraintLayout>
</layout>
Et adaptateur :
class PostsAdapter(): RecyclerView.Adapter<PostsAdapter.PostItemViewHolder>() {
private val posts: MutableList<Post> = ArrayList()
fun setPosts(domains: List<Post>) {
this.posts.clear()
this.posts.addAll(domains)
notifyDataSetChanged()
}
override fun getItemViewType(position: Int): Int {
return super.getItemViewType(position)
}
override fun onBindViewHolder(holder: PostItemViewHolder?, position: Int) {
val post = posts[position]
holder?.binding?.post = post
holder?.binding?.data = post.data as LinkPostData
holder?.binding?.executePendingBindings()
}
override fun getItemCount() = this.posts.size
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): PostItemViewHolder {
val binding = ItemPostBinding.inflate(LayoutInflater.from(parent?.context))
return PostItemViewHolder(binding)
}
class PostItemViewHolder(val binding: ItemPostBinding): RecyclerView.ViewHolder(binding.root) {
}
}