[JAVA] Vérifiez si vous utilisez la liaison de données et que cela ne fonctionne pas

Notez que le fichier de liaison n'a pas été généré automatiquement plusieurs fois et que j'en étais accro.

J'ai mal compris le nom du fichier généré

MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

Le code ci-dessus entraînera une erreur de compilation. Le nom de l'activité est MainActivity, mais la liaison de données est générée en fonction du nom du fichier de mise en page, de sorte que le nom de la classe générée est ActivityMainBinding. Je l'ai mal compris comme MainActivityBinding et j'en étais assez accro.

Je l'ai entouré d'une balise de mise en page, mais il ne génère pas automatiquement

Je l'ai entouré d'une balise de mise en page comme celle-ci, mais elle n'est pas générée automatiquement

<layout>
    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/my_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title" />
</layout>

C'est parce que la description de xmlns: android est devenue TextView. Si vous placez ceci au bon endroit, il sera automatiquement généré.

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:id="@+id/my_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title" />
</layout>

Comme ça.

id Ne crée pas de vue correspondante

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:id="@id/my_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title" />
</layout>

Pourquoi binding.myTextView n'est-il pas censé être généré automatiquement? Cela est dû au fait que l'ID est spécifié de manière incorrecte. Pour être exact, cela devrait être @ + id / my_text_view. Dans le cas de findViewById, cela fonctionne même s'il n'y a pas de +, mais il semble que DataBinding ne fonctionne pas.

Vous pouvez le corriger au format correct de @ + id comme suit.

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:id="@+id/my_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title" />
</layout>

Comme ça!

Une erreur de compilation s'est produite dans le fichier de mise en page. J'ai corrigé la partie pertinente, mais elle est annulée à chaque fois et la correction n'est pas reflétée

Si vous regardez souvent les onglets, ouvrez-vous et modifiez-vous le fichier de mise en page généré automatiquement?

Le fichier qui s'ouvre en cas d'erreur de construction est un fichier généré automatiquement, vous devez donc ouvrir et modifier manuellement le fichier d'origine. N'est-ce pas un bogue dans Android Studio 2.3?

Le fichier de mise en page ne se termine pas

Le contenu de la balise de données dans le code ci-dessous sera complété correctement, mais activity.getMyText ne le sera pas.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="activity"
            type="ore.MainActivity"
    </data>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@{activity.getMyText}"
        android:orientation="vertical">
    </LinearLayout>
</layout>

Vous ne pouvez sauter que partiellement. Au début, je pensais que c'était une erreur d'écriture, mais cela semble être une spécification. C'est trop subtil, j'ai donc arrêté d'écrire onClick dans le fichier de mise en page.

Lors du refactoring (renommer, etc.), j'essaye d'éditer jusqu'à la partie étrange

Il s'agit probablement d'un bogue dans la fonction de refactoring d'Android Studio 2.3. Il semble qu'il soit nécessaire de reconnaître que la fonction de refactoring ne peut pas être utilisée essentiellement là où la liaison de données est utilisée, ou que la fonction de refactoring doit être utilisée avec prudence.

Recommended Posts

Vérifiez si vous utilisez la liaison de données et que cela ne fonctionne pas
Choses à vérifier lorsque vous ne travaillez pas avec proguard
Cela ne fonctionne pas si la clé Map est un tableau
[gradle] pathingJar ne fonctionne pas si le chemin de classe contient des espaces
[Quarkus] Un piège qui ne fonctionne pas même si vous copiez et collez l'exemple GCP Pub / Sub tel quel