[JAVA] [Android] Die Datenbindungsvariable wird in camelCase geschrieben

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

Als,

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

Die Geschichte, von der ich nicht glaube, dass ich in Schwierigkeiten bin. Weil ich süchtig danach war.

Konkretes Beispiel

"Als ich versuchte, die Variable snake_case in der Datei" "zu verwenden, konnte ich nicht darauf zugreifen."

Versuchen Sie, XML zu schreiben

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


<Übergeordnetes Element weggelassen>
    <include
        layout="@layout/child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:value_text="@{someVariable}"/>
</Übergeordnetes Element weggelassen>

Generierter Code

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;
// ~~~Abkürzung~~~
            this.mboundView.setValue_text(someVariableGetValue); // <-Du! !!

Fehlerinhalt

Error:Symbol kann nicht gefunden werden
            this.mboundView3.setValue_text(someVariableGetValue);
                            ^
Symbol:Methode setValue_text(String)

Der vom Attribut app: snake_case generierte Funktionsname lautet also Der Build schlägt fehl, da er sich von dem durch <variable name =" snake_case "> generierten Funktionsnamen unterscheidet.

Ich fühle mich wie "Was ist dann mit" app: camelCase "&" "?" In diesem Fall scheint es, dass ** der Name auf der XML-Dateiseite nicht aufgelöst werden kann und ein Fehler auftritt, bevor BindingImpl generiert wird **. Selbst auf der Schreibseite ist es in XML schwierig, zwischen ihnen zu wechseln. (In meinem Fall)

Bewältigung

Wie ich am Anfang schrieb.

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


<Übergeordnetes Element weggelassen>
    <include
        layout="@layout/child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:valueText="@{someVariable}"/>
</Übergeordnetes Element weggelassen>

Lassen Sie uns die Definition in camelCase ändern.

Bonus

Ich glaube nicht, dass es so viel gesagt wurde, Ich habe auch im Beispiel Official nach einem Variablennamen mit zwei Wörtern gesucht. Es war 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>

Es besteht das Gefühl, dass dieser Bereich (dann lautet die ID der Ressource auch camelCase?) Selbst im von Google bereitgestellten Code nicht konsistent ist. Es scheint also, dass dies seit langer Zeit ein kleines Thema ist.

Recommended Posts

[Android] Die Datenbindungsvariable wird in camelCase geschrieben
[Android / Kotlin] UI-Zusammenfassung
Zusammenfassung des Android-Entwicklungslinks
[Android] Die Datenbindungsvariable wird in camelCase geschrieben
Hinweise zu Android Studio
Android Studio Teil 3-6 besiegen
Android Studio Teil 1 und Teil 2 besiegen
RxJava (RxAndroid) + RxBus + Datenbindung + Raumbeispiel (basierend auf Java 1.7) auf Android.
Daten sind nicht in Rails registriert.
Erstellen Sie Binärdaten variabler Länge in Java
Spring Autowired wird im Konstruktor geschrieben
Wie ist die Datenstruktur von ActionText?
Erste Erstellung einer Benutzeroberfläche für die Android-Entwicklung für vielbeschäftigte Personen (zusätzlich Erfahrung mit Datenbindung)
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
[Java] Verwendung von final in der lokalen Variablendeklaration