[解決済み] データバインディングクラスが生成されない
質問
私はプロジェクトでデータバインディングを使用しています。
<layout>
と
<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>
を含めると、その後に
ActivityMainBinding
クラスを生成することができます。
Android Studioの:
2.1.3
クラスパス:
com.android.tools.build:gradle:2.1.3です。
minSdkVersion
16
ターゲットSdkバージョン
24
buildToolsVersion
24.0.0
どのように解決するのですか?
納得のいく回答は得られませんでした。そこで、私のデータバインディングの知識をまとめたTipsを紹介します。
データバインディングの問題を解決するためのヒント
更新
取得するには より正確なエラー と サジェスト 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 (ビルド > プロジェクト作成) .
- ビルドに失敗した場合、何がエラーなのかを確認します。通常、レイアウトフィールドでエラーが発生します。エラーログは、問題のあるエラー行番号を指摘します。
- バインディングの可能性 失敗 いくつかの 愚かなエラー のような、構文エラーやインポートの欠落が発生します。この場合、バインディングクラスのエラーでいっぱいのログキャストを取得することになります。しかし、あなたは は完全なログキャストを読む必要があります。 になります。 適切な問題を見つける .
6. 最近からプロジェクトを閉じたり開いたりする
よりもはるかに短い時間で済むので、私はいつもこうしています。
Rebuild
/
Make
プロジェクトで使用されます。
- ファイルからプロジェクトを閉じる > プロジェクトを閉じる
- 最近から再び開く
注意 私は 閉じたり開いたり よりも 最近の よりもはるかに短い時間で済むので IDEのリビルド/再起動 .
7. リビルドプロジェクト
それでもクラスが生成されない場合。(レイアウトファイルを貼り付けると発生することがあります)。そこで
プロジェクトをリビルドしてください。
から
Build> Rebuild
(
ビルドやメイクのプロジェクトではありません
). データバインディングクラスが生成されます。(
RebuildはMagicをやってくれる。
)
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を再起動する。
- まず を再起動してみてください。 これは、再起動後に常に私のバインディングレイアウトの変数を生成します。
- もしうまくいかない場合は キャッシュを無効にし、再起動します。 .
データバインディングエラーを解決するために私が行っていることは、これだけです。もし、さらに問題が発生した場合は、ここにコメントすることができます。
関連
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fragmentでデータバインディングを使用する方法
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] ViewPager2でスワイプを無効にするには?
-
[解決済み] アンドロイドボタンセレクター
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
-
[解決済み] <string> XMLで改行やタブを作るには(eclipse/android)?