Android Lollipop のアプリに共有要素遷移を実装したいと考えています。ドキュメント、SO の質問、およびいくつかの投稿を読んだ後、試してみることにしましたが、問題が発生しました。
シナリオは、通常のリスト/詳細デザイン パターンと同様に、2 つのフラグメント コンテナー (タブレット用) を持っているというものです。
リスト項目に触れたときに、リストフラグメントから詳細フラグメントへの共有要素遷移を実行したいと考えています。詳細フラグメントの入力は問題ありませんが、戻るボタンを押すとすぐに、遷移フレームワーク コードで NullPointerException が発生してアプリがクラッシュします。
シナリオは共有要素遷移によってサポートされていますか?
詳細フラグメントを開始するコードは次のとおりです。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = DetailFragment.create((int)id);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
View title = view.findViewById(R.id.item_name);
title.setTransitionName("title");
listFragment.setSharedElementReturnTransition(
TransitionInflater.from(this).inflateTransition(R.transition.change_bounds));
listFragment.setExitTransition(
TransitionInflater.from(this).inflateTransition(android.R.transition.explode));
fragment.setSharedElementEnterTransition(
TransitionInflater.from(this).inflateTransition(R.transition.change_bounds));
fragment.setEnterTransition(
TransitionInflater.from(this).inflateTransition(android.R.transition.explode));
ft.addSharedElement(title, "title");
}
else {
ft.setCustomAnimations(R.anim.slide_in_right, 0, 0, R.anim.slide_out_right);
}
ft.replace(R.id.detail_panel, fragment)
.addToBackStack(null)
.commit();
ログキャットはここにあります:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v4.app.Fragment.getAllowReturnTransitionOverlap()' on a null object reference
at android.support.v4.app.BackStackRecord.configureTransitions(BackStackRecord.java:1201)
at android.support.v4.app.BackStackRecord.beginTransition(BackStackRecord.java:1029)
at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:883)
at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1541)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:502)
at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:176)
...