去年Androidソースコードレビューで指摘する事が多い項目まとめという記事を書いた時はアプリ全体を一度に見るような機会が多かったため、内容も大きめのものばかり書いていましたが、最近はプルリクエスト単位でレビューする機会が増えたので細かい項目についてまとめてみようと思います。
ミリ秒で時間を指定する時に自前で計算している
1000L * 60L * 60L * 24L
のようなコード。
TimeUnitを使いましょう。
24時間の場合は以下のように書けます。
TimeUnit.DAYS.toMillis(1L)
ある文字列がhttp/httpsで始まるかチェック
URLUtil.isNetworkUrl()を使いましょう。
ただしequalsIgnoreCase
で判定してます。
ベースURLにパラメータを付与していってURLを生成したい
StringBuilder#append("&key=").append(value);
のようなコードをいっぱい書いているようなところ。
Uri.Builderを使って以下のように書けます。
Uri.Builder#appendQueryParameter("key", value);
?
や&
、=
を意識しなくてよくなり見やすくなります。
LayoutInflater#inflate()のrootがnull
LayoutInflater#inflate()
でroot
を指定しないと適当なLayoutParams
を用意されて見た目が変わる可能性があるので指定しましょう。
nullにすると警告が出るのですぐわかると思います。
ListViewのHeader/FooterのLayoutInflater#inflate()
Header/FooterはItemのViewと同じようにHeaderViewListAdapter#getView
で返されてListViewに追加されるのでListViewをrootとして渡せばOKです。
Viewの間隔を調整するために透明なViewを使っている
できるだけmarginやpaddingで調整しましょう。
どうしてもViewを置いて調整したいときはSpaceを使いましょう。 このViewは描画処理で何もしないので背景色などが指定出来ない代わりに低負荷です。
ListViewの上下端の要素にだけmarginを入れている
大抵はListViewにpaddingTop/paddingBottomを設定してclipToPadding
をfalseにすると解決します。
文字列のベタ書き
文字列リソースにできるものは文字列リソースにしましょう。
ただし、以下に当てはまるものは文字列リソースに向かないのでベタ書きで良いと思っています。
- ローカライズしてはいけない文字列
- ログや成果計上に使う文字列など
- レイアウトファイルのtools:textなどアプリ内では使われない文字列
private static final String
な文字列