findViewByIdを使ったことある人は多いと思う。
ViewのAPI仕様を見てたら、requireViewByIdという似たようなメソッドを発見したので、違いを書き残しておく。
違い
引数のIDを持つ子孫Viewを検索する。 ビューがない場合はnullを返す。 | |
引数のIDを持つ子孫Viewを検索する。 ビューがない場合はIllegalArgumentExceptionを投げる。 |
使い分け
基本的にrequireViewByIdで良いと思う。
これらのメソッドを使うときは、たいていレイアウトリソースを読み込んだ時だろう。
そうしたとき、静的定義されているViewが見つからないことはありえない。
なのにfindViewByIdを使用すると、静的解析等で「nullになる可能性があるから」とnullチェックを求められる。。
以上から、ViewをNonNullで返せるrequireViewByIdが優れていると思う。
もちろん、addViewやremoveViewを前提とした動的画面であれば、
Viewがいない状況もありえる為、「findViewById+nullチェック」戦法が良いだろう。
requireViewByIdの問題点を挙げるなら、APIが新しすぎるところ
API28からなので、Android9.0未満をサポートするなら使えない。
0 件のコメント:
コメントを投稿