[Android / Java] En savoir plus sur DataBinding

introduction

J'utilise Data Binding dans un projet de développement et j'écrirai un article sur ce que j'ai appris.

Cette fois, j'ai appris à utiliser DataBinding pour surveiller les modifications des propriétés des objets de classe de données et les refléter dans l'affichage View.

Application d'apprentissage créée cette fois

L'affichage du texte de ① et ② est commuté dynamiquement d'avant en arrière chaque fois que vous appuyez sur le bouton "Changer". "Doraemon" ⇄ "Extended"

Dossier d'implémentation

Je vais implémenter

1. Introduction de DataBinding

Ajout de dataBinding {enabled = true} '' à build.gradle (: app) ''

build.gradle


apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.android.databindingjava"
        minSdkVersion 24
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    //Ajouter une description
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

2. Définissez une classe de modèle pour surveiller les modifications

Character.java


//Hériter de BaseObservable
public class Character extends BaseObservable {
    private String name;

    public Character(String name) {
        this.name = name;
    }

    //à getName@BR constant pour la surveillance en donnant Bindable.le nom est généré
    @Bindable
    public String getName() {
        return name;
    }

    //notifyPropertyChanged dans setName(BR.name)En accordant
    //BR du côté de la mise en page.getName correspondant au nom()Est appelé (getName est appelé du côté de la mise en page lorsque setName est terminé)
    public void setName(String name) {
        this.name = name;

        notifyPropertyChanged(BR.name);
    }
}

Pour refléter les changements dans la vue

--Héritage de BaseObservable '' --Ajoutez @ Bindable '' à getName '' pour générer BR.name '', qui est une constante de surveillance.

En faisant cela, getName '' sera appelé du côté de la mise en page lorsque setNameest exécuté, et lorsque la valeur de name`` est modifiée, le changement sera reflété dans la vue.

3. Définissez une interface pour modifier les données

EventHandlers.java


public interface EventHandlers {
    //Je veux correspondre à l'événement de clic, donc l'argument est View.Faites-en la même chose que onClick de OnClickListener (vue Vue)
    void onChangeClick(View view);
}

Définir le gestionnaire d'événements à définir dans la présentation en tant qu'interface

4. Créez un fichier de mise en page pour refléter les modifications

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>

<!--En définissant l'itinéraire vers la mise en page, elle sera reconnue comme une mise en page correspondant à la liaison de données.-->
<!-- activity_main.xml =>ActivityMainBinding De cette manière, une classe Binding est automatiquement créée en fonction du nom de fichier xml.-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!--Objet de liaison-->
    <data>
        <!--Personnage nommé par cette description(Tout)Est associé à l'objet de classe User-->
        <variable name="character" type="com.android.databindingjava.Character" />
        <!--EventHandlers nommé par cette description(Tout)Le gestionnaire (interface) est défini dans-->
        <variable name="eventHandlers" type="com.android.databindingjava.EventHandlers" />
    </data>

    <!-- Views-->
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/text_view_user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:text="@{character.name}" />

        <Button
            android:id="@+id/button_change"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30dp"
            android:text="changement"
            android:onClick="@{eventHandlers.onChangeClick}"
            app:layout_constraintBottom_toTopOf="@id/text_view_user_name"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

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

Accès à la classe de modèle à partir de la mise en page

<variable name = "character" type = "com.android.databindingjava.Character" /> définit un objet de classe Character avec le caractère de nom dans le fichier de mise en page et utilise l'objet dans le fichier de mise en page. devenir capable de.

@ {character.name} Avec cette description, vous pouvez accéder à la propriété name de la classe Character, et android: text = "@ {character.name}" définit la valeur de la propriété sur text.

Définir le gestionnaire d'événements pour l'élément de disposition

<variable name = "eventHandlers" type = "com.android.databindingjava.EventHandlers" /> définit l'interface EventHandlers dans le fichier de mise en page avec le nom eventHandlers, et vous pouvez accéder à l'interface dans le fichier de mise en page. Sera.

@ {eventHandlers.onChangeClick} Avec cette description, vous pouvez accéder à onChangeClick de l'interface EventHandlers, et lorsque vous cliquez en écrivant android: onClick = "@ {eventHandlers.onChangeClick}" dans l'élément Button OnChangeClick sera appelé. (* Une description dans MainActivity.java, qui sera décrite plus tard, est également requise)

5. Définir le processus DataBinding dans MainActivity

MainActivity.java


//Implémenter EventHandlers (interface)
public class MainActivity extends AppCompatActivity implements EventHandlers {

    private Character chara = new Character("Doraemon");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // activity_main.Créer une instance de liaison de la classe correspondant à xml
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        // activity_main.Définir chara en caractère dans xml
        binding.setCharacter(chara);
        // activity_main.Définissez MainActivity sur eventHandlers dans xml
        binding.setEventHandlers(this);
    }

    // button_Cliquez sur le traitement des événements du changement (interface)
    @Override
    public void onChangeClick(View view) {

        //Changer la chaîne de caractères à définir en fonction de la chaîne de caractères du nom de chara
        if (chara.getName().equals("Doraemon")) {
            chara.setName("Étiré");
        } else {
            chara.setName("Doraemon");
        }
    }
}

En créant un fichier de mise en page avec la racine définie sur `` '', une classe Binding correspondant au nom de fichier xml est automatiquement créée. Dans ce cas, activity_main.xml => ActivityMainBinding (.java)

Le traitement suivant est effectué dans `` onCreate ''

--Créez une instance avec ActivityMainBinding binding = DataBindingUtil.setContentView (this, R.layout.activity_main); --Définissez chara en caractère dans le fichier de mise en page avec binding.setCharacter (chara); '' --Définissez MainActivity sur eventHandlers dans le fichier de mise en page avec binding.setEventHandlers (this); ``

Ensuite, l'interface onChangeClick est implémentée et le processus de modification des données selon la valeur de chaîne de caractères TextView sans méthode est écrit.

Site de référence

Cet article du mien est un désordre de référence à cet article. C'était vraiment facile à comprendre! Merci beaucoup!

Liaison de données Android ~ Super Introduction ~

finalement

Cette fois, c'est une application simple, mais le projet réel est volumineux et il est difficile de lire le code. Je continuerai à apprendre davantage.

Nous vous serions reconnaissants de bien vouloir commenter toute erreur ou suggestion.

Recommended Posts

[Android / Java] En savoir plus sur DataBinding
[Java] À propos des fonctionnalités de Java 12
[Java] À propos des tableaux
Quelque chose à propos de java
Où est Java
Interface [Java]
À propos de la classe Java
À propos des tableaux Java
À propos de l'héritage Java
À propos de l'interface, interface java
À propos de Java Var
À propos de Java Literal
À propos des commandes Java
À propos de la sortie du journal Java
À propos de l'interface fonctionnelle Java
À propos de la grammaire de base Android
À propos de la division de classe (Java)
À propos de [Java] [StreamAPI] allMatch ()
À propos de la liaison de méthode Java
[Java] À propos des classes anonymes
A propos des méthodes de fractionnement (Java)
A propos de la liste des baies Java
À propos du polymorphisme Java Super ()
À propos de l'héritage (Java Silver)
À propos de la classe Java String
À propos des modificateurs d'accès Java
À propos des expressions Java lambda
À propos des points d'entrée Java
Prise en charge de Java 10 Docker
Résumé personnel sur Java
Tout sur la programmation Java
À propos de la classe abstraite de Java
À propos des composants de l'application Android
Remarques sur Java GC
Ce que j'ai recherché sur Java 8
À propos des instances Java
Ce que j'ai recherché sur Java 6
[Gradle] À propos des tâches du plug-in Java
À propos des instructions de déclaration de variable Java
Ce que vous avez appris sur le hachage
Ce que j'ai recherché sur Java 9
[Java] À propos de la gestion des exceptions try-catch
À propos des types de chargeur de classe Java
Ce que vous avez appris sur les symboles
[Java Silver] À propos de la méthode equals
[Java] À propos de String et StringBuilder
À propos du cycle de vie Android
À propos des directives de codage Java d'Alibaba
Méthode de classe variable de classe Java
[Java] [Android] Lire le fichier ini
À propos du package Java et de l'importation
À propos de la classe abstraite Java
10 choses que je déteste sur Android
Ce que j'ai appris sur Kotlin
Ce que j'ai recherché sur Java 5
Expression lambda Java apprise avec Comparator
À propos des méthodes Java statiques et non statiques
À propos de la langue à apprendre à partir de maintenant
Essayez d'implémenter Android Hilt en Java
Que diriez-vous de TECH ACADEMY ?? [Cours Java]