コード読むの大好きなので、Android 標準で用意されているViewをフルスクラッチで作ってみる(写経)試みをしてみた。
んで、今回はRadioGroupとRadioButtonをフルスクラッチで実装してみた。
フルスクラッチと言っても、「動機、実装前に気になったこと」の部分をカバーできる範囲の最低限の実装をしました。
そこら辺の理由やそもそもどんな手順で作業したのかみたいなのは、別途まとめたいと思ってます。
とりあえず成果はGithubに置いてあります。本記事に書いてあることもだいたいREADMEにまとめてます。
動機、実装前に気になったこと
以下に書いてあることへの回答的なことはGithubのREADMEにまとまってるので、そちらの参照してください。
- RadioGroupとRadioButtonみたいにRadioButtonにClickListenerみたいなの設定しなくても、親のListenerに通知が来るって実装はどうやってるのか気になった
- RadioButtonにidを振ってなくても各Buttonがそれぞれ別々のButtonとして認識されているのはどうやってるのか気になった
実装してみてわかったこと
- 動的にViewのidを生成するならView.generateViewIdを使うのが良さそう
- ViewGroup側で子Viewのクリックイベント等をハンドリングしたい場合に、ListenerをセットしてもいいがListenerが上書きされる危険性はある
- なので子ViewもCustom Viewにして別口のListenerを作る or setじゃなくてadd Listener的なものがあればそっちにセットするほうがいい
- 特にRadioGroupとRadioButtonみたいに親と子が密接に関連してるものは
- RadioGroupとRadioButtonは親と子が密接?に関連しているViewを作る場合のノウハウを学ぶのに最適だった
- ViewGroup.OnHierarchyChangeListener使えばCustom GroupView作って色々できそう
まとめ
コードリーディング + 実装という最強の2要素が詰まった作業なのでやってみて良かった。
いつも自分が何がなく使っているViewがどう実装されているかを理解できるし、さらに自分が実装する時にも役立ちそうな知識が満載なので面白い。