marcelpreda
Member
Hi there,
Any experience with FragmentManager and the onResume() callback?
I have next problem with an application that use Fragments.
Here is the situation:
Fragment B is actually a progress bar (my own class named ProgressDialog), that shows the progress done by AsyncTask thread.
The code where the fragment B is added on backstack and starts the async task is next one:
FragmentManager fm = getSupportFragmentManager();
mainProgressDialog = new ProgressDialog();
fm.beginTransaction().add(R.id.worker_fragment, mainProgressDialog).
addToBackStack("Compare similar files").commit();
fm.executePendingTransactions();
mainProgressDialog.setOnCancelListener(this);
// GroupFilesTask extends AsyncTask <...>
gft = new GroupFilesTask(this, selectedMountPoints);
gft.execute();
I did some debug: to test how many entries I have on the backstack when activity is visible again [ onResume() callback], and it is present.
But for some reason during onPostResume() callback, the FragmentManger is removing my fragment B from backstack.
See below messages in logcat.
// Override onResum to count number of entries on stackback
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ onResume: Resume
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ Backstack log: There are 1 entries
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ Backstack log: entry 0: Compare similar files
// For some reason my ProgressDialog fragment is removed
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: mName=null mIndex=-1 mCommitted=false
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: Operations:
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: Op #0: REMOVE ProgressDialog{8342967 #1 id=0x7f0c006c}
// here is the stack trace, noticed AppCompatActivity#onPostResume call
12-30 18:44:42.019 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ onBackStackChanged: dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:580)
ro.notnull.IdenticalFilesFinder.MainActivity.onBackStackChanged(MainActivity.java:555)
android.support.v4.app.FragmentManagerImpl.reportBackStackChanged(FragmentManager.java:2528)
android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2228)
android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2155)
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2064)
android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:379)
android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:499)
android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
android.app.Activity.performResume(Activity.java:6359)
android.app.ActivityThread.performResumeActivity(ActivityThread.java:3113)
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3155)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1401)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5459)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Any experience with FragmentManager and the onResume() callback?
I have next problem with an application that use Fragments.
Here is the situation:
- app starts with having as visible a fragment A.
- when a button is pressed a new fragment B is added on backstack and an AsyncTask thread starts in background. It is doing some scanning on internal flash and external SD card so it may take some time (seconds , eventually up to one minute).
- at the end of async thread fragment B is replaced by other Fragment C.
Fragment B is actually a progress bar (my own class named ProgressDialog), that shows the progress done by AsyncTask thread.
The code where the fragment B is added on backstack and starts the async task is next one:
FragmentManager fm = getSupportFragmentManager();
mainProgressDialog = new ProgressDialog();
fm.beginTransaction().add(R.id.worker_fragment, mainProgressDialog).
addToBackStack("Compare similar files").commit();
fm.executePendingTransactions();
mainProgressDialog.setOnCancelListener(this);
// GroupFilesTask extends AsyncTask <...>
gft = new GroupFilesTask(this, selectedMountPoints);
gft.execute();
I did some debug: to test how many entries I have on the backstack when activity is visible again [ onResume() callback], and it is present.
But for some reason during onPostResume() callback, the FragmentManger is removing my fragment B from backstack.
See below messages in logcat.
// Override onResum to count number of entries on stackback
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ onResume: Resume
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ Backstack log: There are 1 entries
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ Backstack log: entry 0: Compare similar files
// For some reason my ProgressDialog fragment is removed
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: mName=null mIndex=-1 mCommitted=false
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: Operations:
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: Op #0: REMOVE ProgressDialog{8342967 #1 id=0x7f0c006c}
// here is the stack trace, noticed AppCompatActivity#onPostResume call
12-30 18:44:42.019 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ onBackStackChanged: dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:580)
ro.notnull.IdenticalFilesFinder.MainActivity.onBackStackChanged(MainActivity.java:555)
android.support.v4.app.FragmentManagerImpl.reportBackStackChanged(FragmentManager.java:2528)
android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2228)
android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2155)
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2064)
android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:379)
android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:499)
android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
android.app.Activity.performResume(Activity.java:6359)
android.app.ActivityThread.performResumeActivity(ActivityThread.java:3113)
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3155)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1401)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5459)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)