[JAVA] [Android] La variable de liaison de données est écrite dans camelCase

<variable name="hoge_text" type="String">

Que,

<variable name="hogeText" type="String">

L'histoire que je ne pense pas avoir de problèmes. Parce que j'en étais accro.

Exemple concret

"Quand j'ai essayé d'utiliser la variable de snake_case dans le fichier <include>, je ne pouvais pas y accéder. "

Essayez d'écrire du xml

child.xml


<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="value_text"
            type="String" />
    </data>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{value_text}"/>
</layout>

parent.xml


<Élément parent omis>
    <include
        layout="@layout/child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:value_text="@{someVariable}"/>
</Élément parent omis>

Code généré

ChildBindingImpl.java


    public void setValueText(@Nullable java.lang.String ValueText) {
        this.mValueText = ValueText;
        synchronized(this) {
            mDirtyFlags |= 0x2L;
        }
        notifyPropertyChanged(BR.value_text);
        super.requestRebind();
    }

ParentBindingImpl.java


    @Nullable
    private final app.package.name.databinding.ChildBinding mboundView;
// ~~~Abréviation~~~
            this.mboundView.setValue_text(someVariableGetValue); // <-Tu! !!

contenu de l'erreur

Erreur:Impossible de trouver le symbole
            this.mboundView3.setValue_text(someVariableGetValue);
                            ^
symbole:Méthode setValue_text(String)

Ainsi, le nom de la fonction généré par l'attribut ʻapp: snake_caseest La construction échouera car il est différent du nom de la fonction généré par`.

Je me sens comme "Then ʻapp: camelCase & `", mais Dans ce cas, ** le nom ne peut pas être résolu côté fichier xml et une erreur se produit avant que BindingImpl ne soit généré **. Même du côté de l'écriture, passer de l'un à l'autre est difficile en XML. (Dans mon cas)

Faire face

Comme je l'ai écrit au début.

child.xml


<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="valueText"
            type="String" />
    </data>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{valueText}"/>
</layout>

parent.xml


<Élément parent omis>
    <include
        layout="@layout/child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:valueText="@{someVariable}"/>
</Élément parent omis>

Changeons la définition en camelCase.

prime

Je ne pense pas que cela ait été tellement dit, J'ai également recherché un nom de variable de deux mots dans l'exemple Official. C'était camelCase. (ʻUserList`)

    <data>
        <import type="com.example.User"/>
        <import type="java.util.List"/>
        <variable name="user" type="User"/>
        <variable name="userList" type="List&lt;User>"/>
    </data>

On a le sentiment que cette zone (alors l'identifiant de la ressource est aussi camelCase?) N'est pas cohérente même dans le code fourni par Google, il semble donc que ce soit un petit sujet depuis longtemps.

Recommended Posts

[Android] La variable de liaison de données est écrite dans camelCase
[Android / Kotlin] Résumé de l'interface utilisateur
Résumé du lien de développement Android
[Android] La variable de liaison de données est écrite dans camelCase
Remarques sur le studio Android
Vaincre Android Studio Partie 3-6
Vaincre Android Studio Partie 1 et Partie 2
RxJava (RxAndroid) + RxBus + Data Binding + échantillon de salle (basé sur Java 1.7) sur Android.
Les données ne sont pas enregistrées dans Rails.
Créer des données binaires de longueur variable en Java
Spring Autowired est écrit dans le constructeur
Quelle est la structure des données d'ActionText?
Première création d'interface utilisateur de développement Android pour les personnes occupées (en plus, expérience de liaison de données)
[Order method] Définit l'ordre des données dans Rails
[Java] Utilisation de final dans la déclaration de variable locale