diff options
| author | Dianne Hackborn <hackbod@google.com> | 2010-11-15 17:58:52 -0800 |
|---|---|---|
| committer | Dianne Hackborn <hackbod@google.com> | 2010-11-16 10:50:31 -0800 |
| commit | 3a57fb9e9c4f205ca6bd4f036b3080f92588d16d (patch) | |
| tree | 5a494ae594e92171aa0d8b5ad00ce205f3afe4bf /core/java/android/preference | |
| parent | 248caac22ef7be6c2357512a1ab7d4a9218f12a8 (diff) | |
| download | frameworks_base-3a57fb9e9c4f205ca6bd4f036b3080f92588d16d.zip frameworks_base-3a57fb9e9c4f205ca6bd4f036b3080f92588d16d.tar.gz frameworks_base-3a57fb9e9c4f205ca6bd4f036b3080f92588d16d.tar.bz2 | |
Fix issue #3191573: PreferenceFragment.onActivityResult cannot
launch a new fragment on the same call.
There were some problems with the API design where you could do
things in such a way that a back stack entry that was not at the
top would get popped. Ouch. Hopefully this change prevents that
from being able to happen.
Change-Id: I8cbc952e12ddd231ff6c84b6e9bbf5125f449f04
Diffstat (limited to 'core/java/android/preference')
| -rw-r--r-- | core/java/android/preference/PreferenceActivity.java | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java index 0ce69ad..39f3cee 100644 --- a/core/java/android/preference/PreferenceActivity.java +++ b/core/java/android/preference/PreferenceActivity.java @@ -23,6 +23,7 @@ import org.xmlpull.v1.XmlPullParserException; import android.app.Fragment; import android.app.FragmentBreadCrumbs; +import android.app.FragmentManager; import android.app.FragmentTransaction; import android.app.ListActivity; import android.content.Context; @@ -902,7 +903,8 @@ public abstract class PreferenceActivity extends ListActivity implements } private void switchToHeaderInner(String fragmentName, Bundle args, int direction) { - getFragmentManager().popBackStack(BACK_STACK_PREFS, POP_BACK_STACK_INCLUSIVE); + getFragmentManager().popBackStack(BACK_STACK_PREFS, + FragmentManager.POP_BACK_STACK_INCLUSIVE); Fragment f = Fragment.instantiate(this, fragmentName, args); FragmentTransaction transaction = getFragmentManager().openTransaction(); transaction.setTransition(direction == 0 ? FragmentTransaction.TRANSIT_NONE @@ -934,7 +936,8 @@ public abstract class PreferenceActivity extends ListActivity implements if (mCurHeader == header) { // This is the header we are currently displaying. Just make sure // to pop the stack up to its root state. - getFragmentManager().popBackStack(BACK_STACK_PREFS, POP_BACK_STACK_INCLUSIVE); + getFragmentManager().popBackStack(BACK_STACK_PREFS, + FragmentManager.POP_BACK_STACK_INCLUSIVE); } else { int direction = mHeaders.indexOf(header) - mHeaders.indexOf(mCurHeader); switchToHeaderInner(header.fragment, header.fragmentArguments, direction); @@ -1061,14 +1064,14 @@ public abstract class PreferenceActivity extends ListActivity implements setResult(resultCode, resultData); finish(); } else { + // XXX be smarter about popping the stack. + onBackPressed(); if (caller != null) { if (caller.getTargetFragment() != null) { caller.getTargetFragment().onActivityResult(caller.getTargetRequestCode(), resultCode, resultData); } } - // XXX be smarter about popping the stack. - onBackPressed(); } } |
