Kotlin移行4
- 2018.10.10
- Android
目的
- Javaで書かれたプロジェクトを少しずつKotlinで書き直す
- TestもKotlin化
- 備忘録的にちょこちょこ完了まで続ける
条件
- AndroidStudio3.2.0
- Java1.8.0_152
- Kotlin 1.2.70
- gradle 4.10.2
今回の作業予定内容
- 某リリース済アプリにKotlin Android Extensionsを適用したい
前提
- View、文字列リソースをButterknifeを使って実装している
- FragmentにもKotlin Android Extensionsを適用する
- FragmentはBaseとなるFragmentを継承して使用している
手順と具体的な作業
対象のFragmentクラスにonViewCreated追加
BaseHogeFragment.kt
1 2 3 4 5 6 7 8 |
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater!!.inflate(R.layout.fragment_hoge, container, false) return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { webview.loadUrl("https://hoge.com") } |
HogeFragment.kt(BaseHogeFragment.ktを継承)
1 2 3 4 |
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) } |
まとめ
Activityと同様にExtensionsを使おうとすると、起動時NullPointerExceptionとかでおちてしまうのでonViewCreatedで行う、という記事が多かったため実装してみるも、SupportLibrary27以降はルールが微妙にかわり、onViewCreatedの第1引数はView?ではなくViewでなければならなくなった。
また、継承先でしっかりsuperを呼ぶことを忘れてはならない(すっかりわすれてwebviewのloadが動いていなかった)
参考
https://qiita.com/toralipse/items/42b0ab9feb80f91af2e0
https://stackoverflow.com/questions/47016853/multiple-errors-in-my-fragments-after-updating-the-support-library-to-27-0-0
コメントを書く