L'utilisation de DataBinding

Introduction

DataBindingIl s'agit JetPackd'une bibliothèque pour la liaison bidirectionnelle, qui peut découpler les données et l'interface utilisateur. Voici un simple enregistrement de son utilisation

2. Configuration de l'environnement

Il est également nécessaire d'ajouter des plug-ins et des bibliothèques dépendantes à utiliser sur l'ancienne version précédente DataBinding, mais pour l'instant, cela n'a pas besoin d'être si compliqué, juste build.gradleune configuration simple dans . Il existe deux méthodes de configuration, comme suit :

première méthode :

android {
    
    
        ...
        dataBinding {
    
    
            enabled = true
        }
    }
    

Deuxième méthode :

 android {
    
    
        ...
     buildFeatures {
    
    
            dataBinding = true
            //viewBinding = true
        }
 }

3. Convertir une mise en page existante en mise en page de liaison de données

Si nous voulons utiliser la liaison de données, la mise en page doit utiliser le format suivant :

<layout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto">
        <data>
            <variable
                name="viewmodel"
                type="com.myapp.data.ViewModel" />
        </data>
        <ConstraintLayout... /> <!-- UI layout's root element -->
    </layout>
    

<layout></layout>Vous pouvez voir qu'il y a plus d' étiquettes que la mise en page précédente . L'étiquette à l'intérieur peut <data></data>être omise si l'opération d'affectation n'est pas utilisée en pratique. Si nous passons manuellement à cette disposition, ce sera un peu plus gênant. Le fonctionnaire fournit un moyen simple.

Tout d'abord, vous devez utiliser la méthode ci-dessus pour activer la fonction de liaison de données. Utilisez ensuite la touche de raccourci dans la mise en page (MAC utilisez Alt + Entrée), la touche de raccourci peut être appelée dans n'importe quel espace vide avant la ligne 6
insérez la description de l'image ici

Après avoir sélectionné et confirmé, il deviendra le code suivant

<?xml version="1.0" encoding="utf-8"?>
<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>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <Button
            android:id="@+id/show_dialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="弹出一个对话框"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/update_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            app:layout_constraintTop_toBottomOf="@+id/show_dialog"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            tools:text="value" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Quatrièmement, liaison de données

Modifier le code ci-dessus pour la liaison de données

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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="change"
            type="String" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <Button
            android:id="@+id/show_dialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="弹出一个对话框"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/update_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="@{change}"
            app:layout_constraintTop_toBottomOf="@+id/show_dialog"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            tools:text="value" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

MainActivity.kt

class MainActivity : AppCompatActivity() {
    
    
    private val binding: ActivityMainBinding by lazy {
    
    
        ActivityMainBinding.inflate(layoutInflater)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
    
    
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        binding.showDialog.setOnClickListener {
    
    
            LoginDialog().show(supportFragmentManager,"")
        }
        binding.change = "啦啦啦"
    }
}

Vous pouvez voir que la mise en page génère une ActivityMainBindingclasse. En modifiant cette classe, changevous pouvez modifier directement le contenu de l'interface utilisateur.

Cinq, fichier DataBinding

JetPack a une liaison de vue et une liaison de données. La liaison de vue enregistre l' findViewById()opération et la liaison de données peut affecter directement des données. Les fichiers DataBinding sont générés de la manière suivante

La première manière :

private val binding: ActivityMainBinding by lazy {
    
    
        ActivityMainBinding.inflate(layoutInflater)
    }

Deuxième manière :

val binding: ActivityMainBinding = DataBindingUtil.setContentView(
                this, R.layout.activity_main)

Si vous utilisez des éléments liés aux données Fragmentdans ListViewou dans un adaptateur. RecycleViewLes moyens suivants peuvent être utilisés :

    val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false)
    // or
    val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)

Parfois, nous ne connaissons pas le type de béton à lier. À ce stade, vous pouvez utiliser les méthodes suivantes pour lier

    val viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent)
    val binding: ViewDataBinding? = DataBindingUtil.bind(viewRoot)

Si la mise en page est augmentée à l'aide d'autres mécanismes, elle peut être liée séparément comme suit :

    val binding: MyLayoutBinding = MyLayoutBinding.bind(viewRoot)

Quand cette méthode sera-t-elle utilisée, comme l'utilisation de balises <include>, <ViewStub>etc. dans la mise en page. Ou vous devez ajouter la mise en page dynamiquement. peut être utilisé de cette façon

Variables dynamiques :
parfois, le système ne connaît pas une classe de liaison spécifique. Par exemple, l'exécution sur une disposition arbitraire RecyclerView.Adapterne connaît pas la classe de liaison spécifique. La valeur de liaison doit toujours être spécifiée lors de l'appel de la onBindViewHolder()méthode .

Dans l'exemple suivant, RecyclerViewtoutes les mises en page sont liées à une variable d'élément. BindingHolderLes objets ont une getBinding()méthode qui renvoie ViewDataBindingla classe de base.

    override fun onBindViewHolder(holder: BindingHolder, position: Int) {
    
    
        item: T = items.get(position)
        holder.binding.setVariable(BR.item, item);
        holder.binding.executePendingBindings();
    }

Remarque : La bibliothèque de liaison de données génère une classe nommée BR dans le package du module qui contient l'ID de la ressource utilisée pour la liaison de données. Dans l'exemple ci-dessus, la bibliothèque génère automatiquement la variable BR.item.

Pour cette explication, veuillez vous référer à https://blog.csdn.net/cunchi4221/article/details/107478770
https://blog.csdn.net/mountain_eyes/article/details/80627037

6. Lien de référence

  1. Mise en route | Développeurs Android | Développeurs Android

Je suppose que tu aimes

Origine blog.csdn.net/Mr_Tony/article/details/124199278
conseillé
Classement