Почему диалоговое окно не отображается сразу после нажатия на пункт меню в приложении AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему диалоговое окно не отображается сразу после нажатия на пункт меню в приложении Android

Сообщение Anonymous »

В моем Android-приложении я использую пункт меню во фрагменте для запуска определенной задачи (обновление данных в отчете).
Пункт меню отображается в виде значка.
Когда я нажимаю на значок пункт меню, отображается диалог прогресса, запускается обновление данных, затем диалог прогресса скрывается.
Я заметил, что если нажать на иконку в меню два раза подряд, то очень быстро, диалог прогресса не успевает отобразиться между кликами, что приводит к вторая попытка запустить уже запущенный процесс и соответствующая ошибка.
Я сделал простейший тестовый пример с примитивным диалогом и задержкой 100 мс в onCreateDialog и получил тот же эффект.
При быстром нажатии на иконку в меню 2 раза подряд метод onMenuItemSelected вызывается дважды, хотя после первого нажатия должен был появиться диалог и сделать второй клик невозможным.
Почему такое произойдет, если работа всех элементов интерфейса должна происходить в одном UI-потоке?
И как это обойти?
Вот мой тестовый класс диалога:
public class TestDlg extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
//
}
return new AlertDialog.Builder(requireContext())
.setTitle("Test title")
.setMessage("Test message")
.create();
}
}

А вот мой тест метода onMenuItemSelected:
@Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.mniRefresh) {
Log.d("YuTAG", "REFRESH item selected");
new TestDlg().showNow(getChildFragmentManager(), null);
return true;
}
return false;
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -an-androi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»