By default, a Binding class will be generated based on the name of the layout
file, converting it to Pascal case and suffixing “Binding” to it.
The above layout file was activity_main.xml so the generate class was ActivityMainBinding.
Bindingクラス、ここではActivityMainBindingが生成されるのはいつですか。コンパイル時エラーがあります。 「ActivityMainBindingを解決できません」。
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
どんな助けも大歓迎です。ありがとう
レイアウト名は何ですか?
上記のレイアウトファイルはactivity_main.xmlであったため、生成クラスはActivityMainBindingでした。
つまり、生成されたクラス名はレイアウトの名前に依存するということです。
activity_main.xml-> ActivityMainBinding.Java
あなたのアクティビティ名は「main_activity」だと思うので、生成されたバインディングクラス名は、ActivityMainBindingではなくMainActivityBindingである必要があります。
バインディングクラスを生成していないときに、Android studioを再起動します。次に、バインディングクラスが生成されます。 Android studioのキャッシュが原因ではありませんか?
ところで、Android-apt
を使用している場合は、確認してください。バインディングクラスが生成されないためです。
データバインディング用にレイアウトファイルを更新しましたか?データバインディングのあるレイアウトに対してのみ生成されます。
2つの子タグ(データとルートビュー)を持つlayout
タグで開始する必要があります。
このようなもの:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout ...
</LinearLayout>
</layout>
レイアウトにこのフォームがある場合、AndroidStudioはクラスを自動補完する必要があります。また、デフォルトでは、<your.app.package>.databinding
パッケージで生成されます。
レイアウトの名前をmain_activity.xml
に変更してみてください
私の場合、「activity_main.xml」のバインディングクラスを生成することはできませんでした。
ただし、レイアウトファイルの名前をmain_activity.xml
に変更しても問題なく機能しました。
レイアウト名はsnake_case
にあり、生成されるバインディングクラス名はCamelCase
。
レイアウト名が
activity_home.xml
の場合、バインディングクラス名はActivityHomeBinding.class
になります。
インポートの提案が得られないとき。このようにバインディングクラスを手動でインポートします。 (IDEでは、クラスのバインドに関する提案が表示されないことがよくあります)
import <yourpackage>databinding.ActivityMainBinding;
注意してください最近からclose and openをお勧めしますより短い時間よりもRebuild/IDEを再起動。
それでも問題がある場合。コメントでお知らせください。または、より良い理解のために この回答 をご覧ください。
独自のバインディングクラス名を指定したい場合は、クラス名を持つclass
属性にdata
属性を追加するだけです。
データ要素のクラス属性を調整することにより、バインディングクラスの名前を変更したり、異なるパッケージに配置したりできます。
<data class="ContactItem">
...
</data>
<data class="com.example.ContactItem">
...
</data>
私の場合、Android Studioの再起動は機能します。 Android-aptのバグです
以下のレイアウトを確認してください。
<data>
<variable name="user" type="com.example.User"/>
</data>
ActivityMainBindingを探している場合は、activity_main.xmlにあります。ほとんどのボイラープレートプロジェクトでは、コンテンツビューをactivity_main.xmlに設定しますが、fragment_main.xmlを拡張します。
<data>
をfragment_main.xmlレイアウトに配置すると、生成されるクラスはFragmentMainBindingになります。
注:これは、読んでみると明らかなように思えるかもしれませんが、Androidのドキュメントに従うと簡単に見落とされる可能性があります。
単純な再起動だけではうまくいきませんでした。 Invalidate Caches and Restart
をしなければならなかったので、バインディングクラスを見ることができました。知らない人のためのFile
メニューの下にあります。
Androidデータバインディングが正常に機能するには、Android gradle用ツール(com.Android.tools.build:gradle)> = 1.3.0を使用する必要があります。
したがって、プロジェクトbuild.gradleは次のようになります。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
classpath "com.Android.databinding:dataBinder:1.0-rc1"
}
}
allprojects {
repositories {
jcenter()
}
}
そして、モジュールbuild.gradleにはそのプラグインが必要です:
apply plugin: 'com.Android.databinding'
結局、最新のbuildToolsVersionを使用しているモジュールをチェックインしてください(現在は22.0.1です)。それが必要かどうかはわかりませんが、「テクノロジーの最先端」にいることについて気分が良くなる可能性があります^ _ ^:
buildToolsVersion '22.0.1'
Gradleとプロジェクトの再構築を再同期します。プロジェクトを再構築しないと、SomeLayoutBinding
クラスが生成されない可能性があります。
アプリケーションメニューから実行できるAndroid Studio:Build -> Rebuild project
私の経験では、[ビルド]> [プロジェクトの再構築]をクリックすると、Android Studio 3.1.3がデータバインディングクラスを生成しました。ファイルは次の場所に保存されました。
\ Project\app\build\generated\source\apt\development\debug\project\Android\app\databinding
ただし、Android Studiostillは、ソースコードでバインディングクラスを「不明」として報告しました。
最終的に修正するために、私は手動importステートメントを追加しました:
import project.Android.app.databinding。*;
同じ問題に直面した。
「ActivityMainBindingを解決できない」理由は、バインディングファイルが生成されないためです。プロジェクトをきれいにして再構築してみてください。また、手順に従っていることを確認してください。
または、生成されたソースを表示する場合。
これらのクラスは、最初のビルドで生成されます。また、アプリケーションモジュールのapplicationIdが、アプリモジュールのAndroidManifest.xmlのパッケージ名と同じであることを確認してください。お役に立てれば。
オブジェクトのフィールドアクセスレベルを確認します。公開すると、ここで機能しました
私の場合、レイアウトタグを<layout></layout>
タグで囲むだけで、データタグを追加せずに、データバインディングを生成できました。お役に立てれば。
<data>
<variable name="user" type="com.example.User"/>
</data>
Android studioを再起動したくない場合、1つの方法は、activity_main.xmlの名前を別の名前(例:activity_m.xml)に変更してから、再びactivity_main.xmlに名前を変更することです。 Android studioを再起動するよりもはるかに高速です。
名前を変更するには、activity_main.xmlを右クリックしてリファクタリング => リネームを選択します
Android-studioの奇妙な「バグ」により、生成されたBR.Javaファイルは@Bindable
フィールドを使用せず、res/layoutディレクトリが存在しない場合に_all
プロパティのみを保持します。
「アクティビティなし」アプリを作成して、バインド可能なさまざまなデータを含むライブラリを作成したいと思いました。
<data class="MainActivityBinding">
<variable
name="user"
type="com.example.administrator.my_mvvm.User" />
</data>
// Build-> Rebuild Projectが必要であることを忘れないでください