pvl*_*spk 2 android android-fragments android-fragmentactivity
我知道有几个类似的问题.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, new LoginFragment()).commit();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "DZActivity onSaveInstanceState");
}
@Override
public void onRequestStarted() {
DZActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i(TAG, "DZActivity onRequestStarted");
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProgressFragment()).commit();
}
});
}
@Override
public void onSignIn(String accessToken) {
DZActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i(TAG, "DZActivity onSignIn");
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
}
});
}
Run Code Online (Sandbox Code Playgroud)
按下后退我第二次启动我的应用程序,在按"登录"后,我得到:
08-07 18:02:54.609: I/DZActivity(3302): DZActivity onCreate
08-07 18:02:54.659: I/DZActivity(3302): DZActivity onResume
08-07 18:03:05.349: I/DZActivity(3302): DZActivity onRequestStarted
08-07 18:03:07.929: I/DZActivity(3302): DZActivity onSignIn
08-07 18:03:19.489: I/DZActivity(3302): DZActivity onPause
08-07 18:03:19.769: I/DZActivity(3302): DZActivity onStop
08-07 18:03:19.769: I/DZActivity(3302): DZActivity onDestroy
08-07 18:03:42.799: I/DZActivity(3302): DZActivity onCreate
08-07 18:03:42.819: I/DZActivity(3302): DZActivity onResume
08-07 18:03:49.559: I/DZActivity(3302): DZActivity onRequestStarted
08-07 18:03:49.559: E/AndroidRuntime(3302): java.lang.IllegalStateException: Activity has been destroyed
08-07 18:03:49.559: E/AndroidRuntime(3302): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1376)
08-07 18:03:49.559: E/AndroidRuntime(3302): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
08-07 18:03:49.559: E/AndroidRuntime(3302): at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578)
Run Code Online (Sandbox Code Playgroud)
如果我的活动被重新创建,甚至没有调用onSaveInstanceState,为什么我会得到它?
这是知道问题,请看这里
这是嵌套片段中的错误.基本上,子FragmentManager在与活动分离时最终会出现内部状态损坏.
短期解决方法是在片段中添加以下代码.
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16029 次 |
| 最近记录: |