スマホ言語

ListViewの1行を表示するViewControllerを書いてみる

更新日:

ボキャブラリーが貧弱でアレなんだけども、やりたいことはそんな感じ。
リスとビューの1行に表示するアイテムのViewCOntrollerを書いてみる。
1行に前回定義したArticleを表示する予定なので、そういう文脈になっている。

findViewById()ではないKotlin風のViewの取り方

findViewById()を使うことで、IDから該当するViewを取ることができるけれど、
その応答値はnullableなので、findViewById()を使って取ったViewを使いまわそうとすると、
nullableに対するケアがつきまとうようになる。

Kotlinのlazy()を使うことでnullableでないViewの取り方を実現できる!
lazy()は移譲プロパティの移譲先を書く書き方。公式の仕様はこちら
遅延プロパティ、つまりアクセスされたときに初めて評価されるプロパティを実現する。

以下、Viewに<T: View> bindView(@IdRes id:Int)という拡張関数を追加している。
追加した拡張関数の戻りがnullを許容しないから、
これを経由すればnullのケアをしなくて良くなる(という話)
lazy()の中で評価したfindViewById()がnullを返した場合、ダウンキャストの失敗を
どう扱うんだろうか。

実装

この拡張関数を使ったArticleViewは以下。
プロパティとして保持するViewがnull非許容になっている。
それにより、setArticle(artilce:Article)において、
プロパティにアクセスする際にnullのケアをしないで済んでいる。

これは便利なんじゃなかろうか。

-スマホ言語
-

Copyright© ikuty.com , 2019 AllRights Reserved Powered by AFFINGER4.