注意!
この記事はQiitaにて公開されていた内容をimportしたものです。
これらの内容は場合によっては陳腐化していて役に立たなくなっていたり、有害であったり、現在の著者の主張と異なることがあります。
皆様の判断の上でご利用いただけますと幸いです(度を超してヤバいものは著者に連絡して頂ければ対応します m(_ _)m)
Databindingが登場し久しいこの頃ですが、いかがお過ごしでしょうか。
ところで、Databindingを使うとViewのgetter/setterをXML attributeで設定できるようになります。
例えば、TextView#setTypeFace()
はapp:typeFace="@{model.typeface}"
のようにして指定できます。
そのようなノリでRecyclerView#setLayoutManager
を使おうとするとちょっとハマります。
実はRecylerViewの app:layoutManager
はDatabindingではなくRecyclerView標準搭載のattributeです。
https://android.googlesource.com/platform/frameworks/support/+/oreo-cts-release/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java#603
もう少し読んでいくと、以下のメソッドでクラスの生成を行っています。 https://android.googlesource.com/platform/frameworks/support/+/oreo-cts-release/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java#676
このとき、(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
な4引数コンストラクタを使ってクラス生成を試み、だめなら無引数コンストラクタをつかうような振る舞いをします。
例としてLinearLayoutManagerを見てみると、こんな感じです。 https://android.googlesource.com/platform/frameworks/support/+/oreo-cts-release/v7/recyclerview/src/android/support/v7/widget/LinearLayoutManager.java#172
実はJavadocに使用方法が書かれています。android:orientation
でdirection指定もできます。こんな感じ。
<android.support.v7.widget.RecyclerView
android:id="@+id/sceneRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:reverseLayout="true"
app:stackFromEnd="false"
app:layoutManager="android.support.v7.widget.LinearLayoutManager" />
ロジック側でlayoutManagerの設定を書かずに済むので、若干コードがスッキリするかも知れません。