Android Databindingを使用してアプリ開発を行っているのですが、Fragmentを使った画面遷移でアプリクラッシュする問題に直面してしまいました。原因を特定するのに時間を使ってしまったので、記録として残しておきます。
発生したエラー内容
この問題に直面して数日経過してしまったため詳細は記憶が曖昧になってきているのですが、問題はActivityのButtonが押下されたときにFragmentの表示を切り替える場面で発生したと記憶しています。1枚目のFragmentはActivity表示時に一緒に描画されていたのですが、それを2枚目に切り替えようとしたときにクラッシュした感じですかね。クラッシュした箇所はFragmentのonCreateViewの中のLayoutInflater.inflater.inflaterメソッドだったと思います。
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.example_fragment, container, false);
}
}
はい。分かる人は分かると思うのですが、Android DevelopersのFragmentのリファレンスにも記述されている自動生成のコードです(フラグメント | Android Developers)。そして、記憶が曖昧ですが下記のようなエラーメッセージが出てました。
Duplicate ID, tag null, or parent id with another fragment for Fragment.
良く分からないですけど、LayoutInflater.inflater.inflaterメソッドの第一引数であるR.layout.example_fragmentが重複しているようなのです。そんなことってあるんですかね…。対策をググってみると重複しているなら削除してしまえという対処療法は見つかるものの、根本的な解決策は見つからぬまま。うーんどうしたものか。
続きを読む