Chr*_*ris 35 android android-fragments
我遇到了一个问题,我有一个包含多个片段的Activity.对于任何单个片段,您可以执行搜索操作,该工作正常...如果您从任何片段中搜索,它将显示一个新的Activity来处理搜索,然后将结果返回到Activity以处理显示新片段.问题是,在搜索操作之后,我希望能够清除(几乎)所有碎片popBackStackImmediate(...),因为saveInstanceState(...)被调用,我得到一个异常,说:
"java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState"
Run Code Online (Sandbox Code Playgroud)
onSaveInstanceState有人知道如何在调用后从后面的堆栈弹出?
Chr*_*ris 21
显然我的问题来自onActivityResult(...)中的调用
我能够通过将UI修改代码放在Runnable中来解决问题,然后将Runnable发布到主线程:
Runnable r = new Runnable() {
@Override
public void run() {
// UI code here
}
};
Handler h = new Handler();
h.post(r);
Run Code Online (Sandbox Code Playgroud)
Shi*_*lpi 17
super.onActivityResult在您的逻辑之前先调用,问题将作为FragmentActivity的onActivityResult调用得到修复mFragments.noteStateNotSaved();
这个答案可能对某人有所帮助.当您的活动不可见时,您无法调用popBackStackImmediate(...)它将抛出非法异常:在onsaveinstancestate之后无法执行此操作.
而不是你可以检查,活动是否可见?在调用popBackStackImmediate()之前.
如果您的活动不可见,请不要调用popBackStackImmediate.当活动再次打开时,您可以通过布尔标志实现.
例如:
public class MainActivity extends Activity {
// Below flag used to check activity visible or not?
private boolean isActivityVisible;
@Override
public void onResume() {
super.onResume();
isActivityVisible = true;
}
public void onPause() {
super.onPause();
isActivityVisible = false;
}
}
Run Code Online (Sandbox Code Playgroud)
在开始关联活动之前立即弹出堆栈怎么样?onSaveInstanceState 在调用 startActivity 之前不会被调用(并且新的 Activity 出现在当前 one0 之前...在此之前,将片段堆栈弹出回您想要的状态,然后调用 startActivity。
由于片段堆栈是正常任务/返回堆栈之上的一层,因此我认为“从中间”修改它会导致问题,这就是您看到该问题的原因。
| 归档时间: |
|
| 查看次数: |
15604 次 |
| 最近记录: |