2016-03-09 6 views
14

lösen Während Datenbindung verwenden, ich bin nicht in der Lage Klasse MainActivityBinding zu bekommen pro Data Binding GuideKann nicht Android Databinding Klasse

Mein Layout Name ist activity_main.xml. Ich sehe auch Android - DataBinding - How and when the Binding classes will be generated? aber es kann mir nicht helfen.

+0

Wie lautet Ihr Tätigkeitsname? –

+0

@MD Mein Name ist activity: 'MainActivity.java' – pRaNaY

+2

Saubere und gebaute Projekt wird dies DataBinding-Klasse wieder generieren als @RRR sagte –

Antwort

11

Vielen Dank an alle für Ihre Antwort.Ich fand Lösung mit ContentMainBinding Klassenname für Datenbindung. Lässt mich erklären.

HINWEIS: Während Layout mit mit <include ... hier ist <include layout="@layout/content_main" mit Datenbindung Funktionalität, der Klassenname Namen enthält Layout verwendet. Hier ist die ContentMainBinding

Meine Layout-Datei wie folgt:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 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" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.databindingdemo.app.MainActivity"> 
    ... 
    <include layout="@layout/content_main" /> 
    ... 
    </android.support.design.widget.CoordinatorLayout> 

Und content_main.xml Layout ist, wo ich meine Datenbindung Layout-Code hinzugefügt.

So anstelle von MainActivityBinding es mit ContentMainBinding

Der Code, die Arbeit für mich gelöst kann, ist unten:

//Code for data binding 
    ContentMainBinding contentMainBinding = DataBindingUtil.setContentView(this, R.layout.content_main); 
    user = new User("Pranay", "Patel", "[email protected]", "9999999999"); 
    contentMainBinding.setUser(user); 

DONE.

45

DataBinding-Klasse wird basierend auf Ihrem XML-Dateinamen generiert. Es ist deutlich in dem Dokument erwähnt, das Sie verfolgen.

Standardmäßig wird eine Binding-Klasse basierend auf dem Namen der Layoutdatei generiert, in Pascal umgewandelt und mit "Binding" versehen. Die obige Layout-Datei war main_activity.xml so die Erzeugung Klasse war MainActivityBinding

Wenn Ihr XML-Name activity_main.xml als Databinding Klassenname ist ActivityMainBinding wird.

Wenn Ihr XML-Name main_activity.xml ist, dann ist DataBinding Klassenname MainActivityBinding.

Vergessen Sie nicht, Projekt zu reinigen und zu bauen, sobald

Sie dieses Tutorial für mehr über DataBinding

+0

Ich bin sicher mit dem Layoutnamen wie ich schon in meiner Frage hinzugefügt habe. – pRaNaY

+0

ja aber in Frage haben Sie 'activity_main.xml' erwähnt und' MainActivityBinding' verwenden, sollte es 'ActivityMainBinding' sein – Rocky

+0

Stellen Sie sicher, dass Sie das Projekt nach dem Hinzufügen von XML-Komponenten neu erstellen, so dass diese Klasse generiert wird. –

1

Cant Kommentar folgen kann, so werde ich dies nur in Antwort hinzuzufügen. Ich glaube, activity_main.xml wird ActivityMainBinding statt MainActivityBinding erstellen, wie Sie erwähnt haben. In einigen Fällen, in denen Studio die Bindungsklasse nicht finden kann, werden die Caches nur ungültig gemacht und das Projekt neu erstellt.

1

Standardmäßig wird eine Binding-Klasse basierend auf dem Namen der Layoutdatei erstellt, beginnend mit Großbuchstaben, Unterstreichungen entfernen (_) und den folgenden Buchstaben groß schreiben und dann "Binding" hinzufügen.

Diese Klasse wird in einem Databinding-Paket unter dem Modulpaket platziert.

Beispiel: Die Layoutdatei contact_item.xml generiert ContactItemBinding. Wenn das Modulpaket com.example.my.app ist, wird es unter com.example.my.app.databinding platziert.

Binding-Klassen können durch Anpassen des Klassenattributs des Datenelements umbenannt oder in andere Pakete eingefügt werden. Zum Beispiel:

<data class="ContactItem"> 
    ... 
</data> 

Dies erzeugt die Bindungsklasse als ContactItem in der Datenbindung Paket in dem Modulpaket. Wenn die Klasse sollte in einem anderen Paket innerhalb des Modulpaketes erzeugt wird, kann es mit “.” vorangestellt werden:

<data class=".ContactItem"> 
    ... 
</data> 

In diesem Fall wird ContactItem direkt im Modulpaket erzeugt. Jedes Paket kann verwendet werden, wenn das Gesamtpaket zur Verfügung gestellt:

<data class="com.example.ContactItem"> 
    ... 
</data> 
3

Wenn Databinding-Klasse Name korrekt ist und Sie zur Reinigung und Wiederaufbau-Projekt, aber es zeigt immer noch Fehler.
Dann versuchen Sie Neustart Android Studio

1

Überprüfen Sie, ob Sie Aktivität/xml und Klasse Fragment konsistente Namen haben; Wenn Sie beispielsweise TimePickerFragment haben, sollte der Name der XML-Datei time_picker_fragment lauten.

Es fiel mir ein, dass ich das Layout fragment_time_picker hatte; nachdem ich es geändert habe, wurde die Bindung generiert.

2

In solchen Fällen, wenn weder Rebuild- noch Ungültigkeits-Caches funktionieren, muss ein Fehler in einer Ihrer XML-Dateien vorhanden sein, in der Sie @ {xyz.abc} verwendet haben und ein Problem mit xyz oder abc auftreten muss in der XML.

0

Ich habe die folgenden Lösungen versucht, die für mich nicht funktionierten: 1) Cache ungültig und neu starten. 2) Starten Sie Android Studio neu. 3) Projekt neu erstellen.

Was das Problem DID beheben ist: 1. wieder das "Databinding" -Tag im Modul gradle.build 2. Sync Projekt 3 Rückkehr des "Databinding" Tag 4. Sync Projekt entfernen.