gpt4 book ai didi

android - 从 onContextItemSelected 显示的 DialogFragment 在暂停/恢复时不存在

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:53:16 25 4
gpt4 key购买 nike

我有一个 DialogDragment,我可以用两种方式之一显示它:

1) 通过点击 ListView 项目的 OnItemClickListener

2) 通过激活 ListView 的上下文菜单并选择菜单项

#1 在所有生命周期事件下都能正常工作,但如果我通过#2 调用它并暂停 Activity (通过返回主页)并通过任务切换器恢复它,则不再显示该对话框。 fragment 就在那里,我可以旋转设备并显示对话框。

我进行了实验,如果我将 DialogFragment 的显示放入处理程序中至少延迟 1/2 秒,它就可以工作。

以下代码 fragment 失败了——它显示了对话框,但随后暂停/恢复隐藏了它:

public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;

switch (item.getItemId()) {
case R.id.menu_item:
showMyDialogFragment();
consumed = true;
break;
}

return consumed;
}

所以下面的代码 fragment 有效。暂停/恢复再次正确显示对话框:

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;
}

用0ms或250ms的延迟代替300ms的秒延迟会导致它再次被破坏。这在 100% 的时间内是可重复的。

这显然是一个糟糕的黑客攻击,由于可能取决于设备速度的常量而变得更糟。

有人知道为什么会这样和/或提供更好的解决方案吗?我在这个问题上花了几个小时,这是我能想到的最好的办法。

最佳答案

我可以在 Android 4.2(ARM 模拟器和 Galaxy Nexus)上重现这个。我无法在 x86 4.1 模拟器、Nexus S (4.1) 和 Motorola RAZR i (4.0) 上重现您的发现。我还可以通过修改我自己的一本书示例来重现该问题。我用你的样本提出了一个问题:http://code.google.com/p/android/issues/detail?id=41901请添加您认为有助于他们诊断问题的任何其他信息。

关于变通方法,如果 300 毫秒有效,那么我们就会遇到那些可爱的“计时问题”之一,而且我完全不知道您将如何解决它,除非不使用菜单来显示它.例如,对于您的示例应用程序,只需切换到 SHOW_AS_ACTION_ALWAYS(因此让它成为操作栏上的一个项目而不是溢出菜单中的项目)就足以让 DialogFragment 举止得体。希望您有办法调整您的 UI 来弥补这个错误,或者也许有人会想出另一种解决方法并将其张贴在这里或在这个问题上。

关于android - 从 onContextItemSelected 显示的 DialogFragment 在暂停/恢复时不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com