Tom*_*ney 8 android android-lifecycle android-fragments android-dialog
我有一个DialogDragment,我可以用以下两种方式之一:
1)通过点击其OnItemClickListener中的ListView项
2)通过激活ListView的上下文菜单并选择菜单项
做#1在所有生命周期事件下都能正常工作,但是如果我通过#2调用它并暂停活动(通过回家)并通过任务切换器恢复它,则不再显示对话框.片段在那里,我可以旋转设备并显示对话框.
我进行了实验,如果我把DialogFragment的显示放到Handler中,延迟时间至少为1/2秒,那就可以了.
以下代码段失败 - 它显示对话框,但暂停/恢复隐藏它:
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;
switch (item.getItemId()) {
case R.id.menu_item:
showMyDialogFragment();
consumed = true;
break;
}
return consumed;
}
Run Code Online (Sandbox Code Playgroud)
所以下面的代码段可行.暂停/恢复再次正确显示对话框:
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;
switch (item.getItemId()) {
case R.id.menu_item:
new Handler().postDelayed(new Runnable() {
public void run() {
showMyDialogFragment();
}
}, 300);
consumed = true;
break;
}
return consumed;
}
Run Code Online (Sandbox Code Playgroud)
用0ms或250ms延迟替换300ms秒延迟会导致它再次被破坏.这可重复100%的时间.
这显然是一个可怕的黑客,通过可能取决于设备速度的常数变得更糟.
有谁知道为什么会这样做和/或提供更好的解决方案?我在这个问题上花了好几个小时,这是我能想到的最好的.
我建议在所有暂停时销毁对话框,并根据状态在 onResume 中重新创建,无论对话框是如何调用的。否则,如果应用程序在暂停时被操作系统终止,则存在内存泄漏的风险。
要明确回答您的问题,请不要依赖操作系统来维护您的应用程序状态。
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |