DialogFragment, отображаемый из onContextItemSelected, не сохраняется в onPause / onResume
У меня есть DialogDragment, который я могу показать одним из двух способов:
1) При нажатии на элемент ListView из его OnItemClickListener
2) Активизируя контекстное меню ListView и выбирая пункт меню
Выполнение # 1 прекрасно работает во всех событиях жизненного цикла, но если я вызову его через # 2 и приостановлю действие (перейдя домой) и возобновлю его через переключатель задач, диалоговое окно больше не отображается. Фрагмент есть, и я могу повернуть устройство и показать диалог.
Я экспериментировал, и если я помещаю показ DialogFragment в обработчик с задержкой не менее 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;
}
Так что следующий фрагмент работает. Пауза / возобновление отображения диалогового окна снова правильно:
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;
}
Замена задержки 300 мсек с задержкой 0 мс или 250 мс приводит к ее повторному прерыванию. Это повторяется 100% времени.
Это ужасный взлом, очевидно, усугубленный константой, которая, вероятно, зависит от скорости устройства.
Кто-нибудь знает, почему это происходит, и / или предлагает лучшее решение? Я потратил часы на эту проблему, и это лучшее, что я мог придумать.