満足のいく答えは得られませんでした。だからここに私のデータバインディングの知識の要約であるヒントがあります。
データバインドの問題を解決するためのヒント
更新
より正確なエラーと提案を取得するには、Android StudioとGradleプラグインのバージョンを最新に更新することを強くお勧めします。AS 3.2バージョン以降、多くの問題に直面していないためです。
最新のAndroid Studioと最新のGradleプラグインをご覧ください。
元のソリューション
この答えを読んだ後、あなたは動けなくなることはありませんは、クラスとデータ変数の両方でデータバインディングの自動生成の問題が発生。
これらのポイントを1つずつ確認してください。これらのどれでもあなたの仕事を終わらせることができます。最後にポイント3は本当に重要なので、それらをお見逃しなく。
1.データバインディングが有効かどうかを確認する
でデータバインディングを有効にする必要がありますbuild.gradle
。そうでない場合は、これと同期を追加します。
android {
...
dataBinding {
enabled = true
}
...
}
2.レイアウトがバインディングレイアウトに変換されていることを確認します
データバインディングクラスを生成する場合は、データバインディング(タグ)でラップxml layout
する必要があります<layout
。このようなもの。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
これに加えて、ビューモデルクラスのようにバインディング変数名が正しいかどうかを確認します。
3.自動生成されたバインディングクラス名?
データバインディングクラスは、バインディングレイアウトを作成した後に生成する必要があります。
レイアウト名がスネークケースの場合 activity_main.xml
、データバインディングクラスはのようなキャメルケースで生成されActivityMainBinding
ます。
4.インポート候補が表示されませんか?
入力するとActivityMai...
、提案が表示されない場合があります。その場合は手動でインポートしてください。
import <yourpackage>databinding.ActivityMainBinding;
5. Build Fail Logcatを読み取ります
ビルドが失敗した場合、バインディングクラスとレイアウトの新しい変数は生成されません。だから、最初のメイクプロジェクトによってはCtrl + F9(ビルド>メイクプロジェクト)。
- ビルドが失敗した場合は、エラーを確認してください。通常、レイアウトフィールドにエラーがあります。エラーログは、問題のあるエラー行番号を示します。
- バインドが失敗すると、構文エラーやインポートの欠落など、愚かなエラーが発生する場合があります。その場合、バインディングクラスのエラーでいっぱいのlogcatを取得します。ただし、適切な問題を見つけるには、logcat全体を読む必要があります。
6.最近のプロジェクトを閉じて開く
Rebuild
/ Make
プロジェクトよりもはるかに短い時間がかかるので、私は常にこれを行います。
- ファイル>プロジェクトを閉じるからプロジェクトを閉じる
- 最近から再開
IDEの再構築/再起動よりも時間がかからないため、最近から閉じると開くを選択することに注意してください。
7.プロジェクトの再構築
それでもクラスが生成されない場合。(レイアウトファイルを貼り付けると、ときどき発生します)。次に、(プロジェクトのビルドまたは作成ではない)からプロジェクトを再ビルドします。データバインディングクラスを生成します。(再構築は私のためにマジックを行います。Build> Rebuild
)
8.最新のAndroid Studioを持っている
ASをAndroid Studio 3.2に更新した後、データバインディングの自動生成における多くのバグ修正を感じました。したがって、最新のASも必要です。
ソリューション <variables
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
通常、変数をレイアウトに配置すると、そのゲッターとセッターが作成されます。そしてbinding.setItem(item);
、binding.getItem();
していますが、それらのメソッドを見ることができないならば、以下の情報をお読みください。
1.最近のプロジェクトを閉じて開く
データ変数を作成した場合- <variable
レイアウトで、データバインディングクラスにセッターとゲッターが表示されない場合は、RecentからCloseおよびOpen、プロジェクトます。
2.タイプを変更した後のプロジェクトのクリーンアップ
<variable
レイアウトの一部のタイプを変更し、ゲッターセッターのタイプが変更されない場合は、プロジェクトのクリーンアップ(Build> Clean Project
)
最後の言葉
最後に、それでもバインディングクラスが生成されない場合は、最も強力な武器があります。- 再起動のAndroidメーカー:D
- 最初に、単にrestartを試してみてください。これにより、再起動後に常にバインディングレイアウトの変数が生成されます。
- 動作しない場合は、キャッシュを無効にして再起動してください。
これで、データバインディングエラーを解決することができます。さらに問題が発生した場合は、ここでコメントできます。
dataBinding.enabled
あなたのbuild.gradleに?