次の構造を持つアプリケーションをビルドしています。バックグラウンドから死んだアプリを再開すると、奇妙な動作をしています
MainActivity -> Fragment1
-> Fragment2 -> Fragment3
ここで、Fragment1はFrameLayoutのMainActivityでホストされています。ユーザーがFragment1で任意のオプションをクリックすると、ViewPagerでFragment3をホストするFragment2に切り替わります。
問題は、ユーザーがアプリを終了せずにアンドロイドホームに移動し、アプリがAndroidによって強制終了され、最近のアプリリストからアプリを再開しようとすると、Fragment3は空白の画面を表示しています。
は、ここで私は断片取引のため
public void requestChangeFragment(Fragment newFragment,String tag,Fragment oldFragment, int anim_in, int anim_out){
if(isStopped()){
return;
}
mFragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(anim_in,anim_out,anim_in,anim_out);
fragmentTransaction.add(R.id.main_frame_layout, newFragment, tag);
Log.i("FragMngr","Animations set in "+anim_in+" out "+anim_out);
fragmentTransaction.addToBackStack(tag);
int count = mFragmentManager.getBackStackEntryCount();
String log="";
fragmentTransaction.commit();
for(int i=0;i<count;i++){
android.support.v4.app.FragmentManager.BackStackEntry backStackEntry = mFragmentManager.getBackStackEntryAt(i);
log += "count "+i+" name "+backStackEntry.getName()+"\n";
}
Log.d("FragMngr","BackStack trace after adding is\n "+log);
if(oldFragment!=null) {
if(oldFragment.isResumed()) {
oldFragment.onPause();
}
}
topFragment = newFragment;
}
requestChangeFragment()
を使用しています方法はMainActivity
で実装interface
の助けを借りて、断片を実行から呼ばれています。
コードを追加できますか? onResumeメソッドやonPauseメソッドのように – user6547359
ログ以外のメソッドには基本的に何もありません。私がこれらの断片でCrashlyticsを使用しようとしているときでもクラッシュしています。 (Crashlyticsは初期化されていません)、Crashlyticsを初期化しようとしている場合、そのコンテキストを表示することはできません。 –
おそらくライフサイクルを本当にうまく管理しているとは限りません。あなたがそれを読むためにwnatすれば良いチュートリアルです。https://www.raywenderlich.com/117838/introduction-to-android-fragments-tutorial – user6547359