DataBindingを使おうとしてバインディングクラスがcannot resolve などとエラーになった時に確認すること
DataBindingを使う時に、プロジェクト生成時に作成したactivity_main.xmlとMainActivity.javaをバインディングしようとしただけで
「Cannot resolve symbol 'ActivityMainBinding'」とか言われたはことないでしょうか。
私は2回あるので、初歩的ではありますが簡単にメモっておきます。
本エントリーでは本当に最初の定義の部分の確認のため、データクラスのインスタンスとレイアウトのバインディングのことまで触れておりませんのでよろしくお願いいたします。
前提事項
public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; // ← ここがエラーになる @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); } }
確認事項
DataBinding設定
appモジュールのbuild.gradleにDataBindingが正しく指定されているか
android { 中略 dataBinding { enabled = true } 中略 }
レイアウトxml
レイアウトxmlのルートタグが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 android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.lastName}"/> </LinearLayout> </layout>
バインディングクラスのクラス名は正しく定義したか
バインディングクラスは、レイアウトxmlの名前のパスカルケース+"Binding"というルールで自動生成されます。
R.layout.activity_main からは ActivityMainBinding というクラスが生成され、
R.layout.fragment_settings からは FragmentSettingsBinding というクラスが生成されます。
自動生成された後ならAndroid Studioで補完が効くのであまり間違わないと思います。
上記を確認した後に「Cannot resolve symbol 'ActivityMainBinding'などとエラーになった場合
Android Studioを起動し直す
これで上手く行ったりするんですよねぇ(;´∀`)
2016/11/18 追記
コメント欄にて id:kimukou_26さんからこのように教えていただきました。
きむこうさんありがとうございます( ´∀`)
再起動しなくてもgradle sync をすれば認識できますよ。
xmlのパースエラーはsys.errに表示されるみたいなので
terminal から
gradlew assembleDebugを行えば
xmlのパースエラーが出た場合には最終行あたりにエラー行が表示されます
きむこうさんがDataBindingの記事を書いていらしてるのでこちらもどうぞ( ´∀`)
exception-think.hatenablog.com
2017/04/01追記
id:kimukou_26さんからあらためて教えていただきましたので追記します。きむこうさんありがとうございました!
AS再立ち上げで治る の記載の話ですが、
AS2.2系までの対処法で、そのときはプロジェクトを閉じる時にgradle deamonが終了してくれていました。
(gradle consoleでエラーが出ていない事が前提AS2.3系では終了されませんので
./gradlew clean
./gradlew cleanBuildCache //InstantRunを使っている時
./gradlew --stopjpsでjavaのプロセスを確認
AS以外のプロセスが居たら kill -9 で殺すあたりが必要になります
それでも改善されない場合、
あとなぜかIDEのメモリ上に状態を保持しているようなので
AS再起動が有効な場合がありあとAS再起動よりもInvalidate Restart が良い
という言及もありますが、これは
build.gradle のコンパイル済み中間キャッシュを $HOME/.gradle の下にdeamon実行中に保持しているためなのでbuild.gradleを書き換えておかしくなった みたいな状況でない場合は
改善策としては微妙な線かと思います
7ヶ月ぶりに公益財団法人どうぶつ基金に5000円寄付しました&近況
11月に入ってしまいましたけど、10月分のつもりです。
公益財団法人どうぶつ基金さまに5千円寄付しました。
どうぶつ基金さまに寄付をするのは4月以来です。前回の記事はこれですね。
sakura-bird1.hatenablog.com
当時はこの記事を書くのには抵抗感があったんだけど、蓋を開けてみれば
寄付の記事にスターを付けてくださるかたもいらして、応援していただいてると勝手に解釈しています!
こういうのってホントに励みになりますね。寄付も、記事を書くこともやっていてよかったです。
街で見かける野良猫さんで耳先カットしている猫さんがいるのを見たことがありますか?
この赤丸の部分のような↓
これがさくら猫というやつで、ボランティアさんが保護→不妊・去勢手術後リリースされた猫さんです。
先日猫がたくさんいるスポットでたくさん見かけました。
この活動が殺処分を減らしたり、地域の野良猫生活被害を減らしていくことにつながります(=^・^=)
話変わって最近の近況をズボラ報告です。
ポケモンGoは現在トレーナーレベル29です。
図鑑は141種類であとラッキーを捕まえれば国内のポケモンをコンプリートです。
といってもリリースから4ヶ月以上経って、ここしばらくはさすがに活動が鈍化してきました。
夜のウォーキングのお供程度です。これはこれでモチベーション維持に役に立ってます。
あとは開発ですが、年を取っても、どんな形でも続けていきたいなーって思っています。
北島マヤみたいな恐ろしい子ではありませんが(笑)
一般社団法人ちよだニャンとなる会さんに5千円寄付しました。Pokemon Go まだやってます。レベル28です。
こんにちは!
あっという間に一ヶ月経ってしまいました。
ここ2ヶ月ぐらいポケモンの世界にいたせいか、他のことが疎かになってきてるような気がしてヤバイと思っています。
開発をもっとやりたいのです。
密かに不安に感じているのですが最近物忘れもひどいので、いつまで自分は開発をやってられるのだろうか、
特にプログラミングでお金をいただくということは果たしていつまで出来るんだろう。
今が最後かもしれないのにこんなこと(ゲーム、ぐうたら、漫画、ネットを徘徊などなど)していていいのだろうか。
うわーん反省。ごめんなさい。
ちゃんとした人間になります!
って感じで一瞬大反省するもすぐ忘れてしまうということを繰り返しております(´-﹏-`;)
一応勉強はちびちびやってはいるのですがね。
↓ ここで記録しています。見えるかな?
studyplus.jp
何年か勉強の記録を付けてみて思ったのは
人間(特に自分)は弱い。だから習慣の力に頼るのだ。
ということです。
自分を責めるよりはまず15分だけ手を動かしたりすることですね。
とかなんとか言ってもとにかく理想通りにいかないですね。
私には何らかの強制力が働く方がいいのかもしれません。
ところで、今月は一般社団法人ちよだニャンとなる会さんに5千円寄付しました。
www.chiyoda-nyan.org
東京・千代田区で行政と連携・協力して「飼い主のいない猫」の問題に取り組んでいらっしゃいます。
行政もこの問題に取り組んでくれるってたまに見かけますが、嬉しくてうるっときます。
こうした取り組みが全国に全宇宙に広がっていってほしいですね。
さっき振込予約しました。
そして、Pokemon Goですが、トレーナーレベル28になりました。
いい運動になってますよ。
図鑑も142種類のうち138種類まで埋まりました。あと4種類。
最近せっかく10キロ歩いて卵を孵化してカイロスさんばかり生まれるのです。