問題点
- MotionLayoutの中にChildFragmentでConstraintLayoutの中にFragmentの中にカメラプレビューを置いた
- ユーザーの操作にあわせてアニメーションしたり、Viewを入替えたりする
- サムスン、Huaweiの端末(もしくはAndroid 8以上?)でChildFragment.replace()すると、カメラが表示されない
場合がある
原因
- onCreateView後、なぜかViewのmeasure, width, heightが全部0になっている
- Viewがレイアウトされず放置されるらしい
- Activity.onPause/onResumeを経由(Fragment開いているときに他のActivityからonActivityResultで結果を受け取ったり)すると100%再現
- どこが原因か、正直不明だった
- 自動でViewの配置やViewレイアウトの構築をトリガーしてくれないなら、手動トリガーすればいいじゃない
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
requireParentFragment().requireView().requestLayout()
}
どこが原因だ?
- MotionLayoutか?
- ChildFragment 2段階入れ子だからか?
- ConstraintLayout in MotionLayoutだからか?
- わからないが、コレで逃げられることはわかった