Der Menüpunkt wird als Symbol angezeigt.
Wenn ich auf klicke Im Menüpunkt wird ein Fortschrittsdialog angezeigt, die Datenaktualisierung wird gestartet, dann wird der Fortschrittsdialog ausgeblendet.
Mir ist aufgefallen, dass es sehr schlimm ist, wenn man im Menü zweimal hintereinander auf das Symbol klickt Schnell hat der Fortschrittsdialog keine Zeit, zwischen den Klicks angezeigt zu werden, was dazu führt ein zweiter Versuch, einen bereits laufenden Prozess zu starten, und ein entsprechender Fehler.
Ich habe den einfachsten möglichen Testfall mit einem primitiven Dialog und einer Verzögerung von 100 ms in onCreateDialog erstellt und erhalte den gleichen Effekt.
Wenn Sie zweimal hintereinander schnell auf ein Symbol im Menü klicken, wird die Methode onMenuItemSelected zweimal aufgerufen, obwohl nach dem ersten Klick der Dialog angezeigt werden sollte und der zweite Klick unmöglich sein sollte.
Warum? Passiert das, wenn die Arbeit aller Schnittstellenelemente in einem UI-Thread erfolgen soll?
Und wie kann man das umgehen?
Hier ist meine Testdialogklasse:
Code: Select all
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();
}
}
Code: Select all
@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;
}