プロジェクトでデータ バインディングを使用していますが、 を使用すると<layout>
XML<data>
バインディング クラスが生成されません。
例えば、activity_main.xmlがあります
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data> </data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</layout>
ActivityMainBinding
現在、アクティビティ/フラグメントに書き込むと、クラスが利用できないというエラーが表示されます。ただし<variable>
、xml ファイルに組み込むと、クラスを生成できますActivityMainBinding
。
Androidスタジオ:2.1.3
クラスパス:com.android.tools.build:gradle:2.1.3
最小SDKバージョン16
ターゲットSDKバージョン24
ビルドツールバージョン24.0.0
ベストアンサー1
満足のいく回答は得られませんでした。そこで、データ バインディングに関する私の知識をまとめたヒントをここに示します。
データバインディングの問題を解決するためのヒント
アップデート
取得するためより正確なエラーそして提案Android Studio と Gradle プラグインのバージョンを最新バージョンに更新することを強くお勧めします。AS 3.2 バージョン以降では、多くの問題が発生していないためです。
見る最新のAndroid Studio、 そして最新のGradleプラグイン。
オリジナルソリューション
この回答を読んだ後、あなたは詰まらないデータバインディングの自動生成の問題クラスとデータ変数の両方。
これらのポイントを一つずつ確認してください。これらのいずれかを実行することで作業は完了します。最後の3番目は本当に重要なので見逃さないでください。
1. データバインディングが有効になっているか確認する
あなたはデータバインディングが有効でbuild.gradle
。そうでない場合はこれを追加して同期。
android {
...
buildFeatures {
dataBinding 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. ビルド失敗のログキャットを読む
ビルドが失敗すると、バインディングクラスとレイアウト内の新しい変数は生成されません。まずプロジェクトを作成するによるCtrl + F9 (ビルド > プロジェクトの作成)。
- ビルドが失敗した場合は、エラーの内容を確認します。通常、レイアウト フィールドにエラーがあります。エラー ログには、問題のあるエラー行番号が示されます。
- バインディングは失敗何らかの原因愚かなエラー構文エラーやインポートの欠落などです。その場合、バインディングクラスのエラーが満載のlogcatが表示されます。しかし、完全なlogcatを読む必要がありますに適切な問題を見つける。
6. 最近使ったプロジェクトを閉じて開く
Rebuild
/Make
プロジェクトよりも時間がかからないので、いつもこれを行います。
- ファイル > プロジェクトを閉じるからプロジェクトを閉じる
- 最近から再度開く
ご了承ください私は閉じると開くから最近のなぜなら、IDEの再構築/再起動。
7. 再建プロジェクト
それでもクラスが生成されない場合は(レイアウトファイルを貼り付けるときに時々発生します)。再建プロジェクトからBuild> Rebuild
(ビルドや作成プロジェクトではない)。データ バインディング クラスが生成されます。(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
あなたのレイアウトとそれはセッターとゲッターが表示されませんデータバインディングクラスでは、最近閉じる、最近開くあなたのプロジェクト。
2. タイプを変更した後、プロジェクトをクリーンアップする
いくつかのタイプを変更した場合<variable
レイアウトとゲッターセッターの型は変更されませんクリーンプロジェクト ( Build> Clean Project
)
最後に
最後に、バインディング クラスがまだ生成されない場合は、最も強力な武器を手に入れることができます。 -Android Studioを再起動します
- 初挑戦再起動するだけこれにより、再起動後に常にバインディング レイアウトの変数が生成されます。
- もしうまくいかなかったらキャッシュを無効にして再起動。
これが、データ バインディング エラーを解決するために私が行ったことのすべてです。さらに問題が発生した場合は、ここにコメントしてください。