Ankoで viewをつくると attachされてしまう?
Ankoで Adapterの getView
を実装するのに 手間取ってました。
getView
は、親 Viewに attachしてはいけませんが、Ankoで attachせずに Viewを生成する方法がわからなかったからです。ちなみに、attachしてしまうと以下の様な例外が発生します:
java.lang.UnsupportedOperationException: addView(View)
is not supported in AdapterView
at android.widget.AdapterView.addView()
UiHelper
というものを使うと attachされてない Viewを作れる!
答えは anko-template-project にありました。
dsl
という extensionをはやして、そこで UiHelper
に適用するのが idiomのようです:
ListItemAdapter.kt
public inline fun <T: Any> dsl(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) f: UiHelper.() -> T): T {
var view: T? = null
getContext().UI { view = f() }
return view!!
}
これで 自分の projectも Ankoをとりこむことができました。めでたしめでたし。