ちょっとした知見置き場

Andoidアプリ開発における知見やメモをまとめておきます。

Epoxy(4.0.0-beta6) : package-info.java作成時にハマった話

Epoxy (4.0.0-beta6) でpackage-info.javaを作成時にハマった話

何があったか

※実装を見ていったりはしないです。ご注意ください。

この度初めてEpoxyを使ってRecyclerViewの実装をしていました。

Epoxyを使っていく中でpackage-info.javaを作成する過程があります。 READMEを参考に実装を進めていくと...

package-info.java

@EpoxyDataBindingLayouts({R.layout.header_view, ... // other layouts })
package com.airbnb.epoxy.sample;

import com.airbnb.epoxy.EpoxyDataBindingLayouts;
import com.airbnb.epoxy.R;

こちらを記述しなさいとのことですが、以下のようなエラーが出力されます。

エラー: 注釈型はこの種類の宣言に使用できません @EpoxyDataBindingLayouts({R.layout.header_view, ... // other layouts})

どのように解決するか

ReleaseNote 4.0.0-beta5によると

Breaking!

The annotation that support databinding, EpoxyDataBindingLayouts and EpoxyDataBindingPattern, must now be placed on a class or interface instead of in a package-info.java file. The interface or class must be in Java, Kotlin is not supported. This is necessary to support incremental processing.

とのことで

EpoxyDataBindingLayoutsEpoxyDataBindingPatternpackage-info.javaの代わりにclassやinterfaceに記述しろとのことでした。

Kotlinはサポートされておらず、Javaのみだそうです。

package com.example.app;
import com.airbnb.epoxy.EpoxyDataBindingLayouts;
import com.airbnb.epoxy.EpoxyDataBindingPattern;
@EpoxyDataBindingPattern(rClass = R.class, layoutPrefix = "my_view_prefix")
@EpoxyDataBindingLayouts({R.layout.header_view, ... // other layouts})
interface EpoxyDataBindingConfig {} 

公式にも記述されている通り、このように記述してあげるとうまく動きます。

おわりに

Epoxyを使ってみようとした時に、この壁に当たってしまってかなり時間を取られてしまいました。 困ったらReleaseNoteを読んでみるというのもありだなと勉強になりました。

やっとEpoxyを使った実装に入っていけそうです!!