V dlhodobej prevádzke zobrazujem vyskakovacie dialógové okno (vytvorené z ProgressDialog
zabrániť ďalším operáciám).
Urobil som to nezrušiteľným pomocou setCancelable(false)
, takže ho nemôžem zavrieť pomocou tlačidla späť, ale prekvapením je, že tlačidlo Hľadať hardvér dialógové okno zavrie!
Presnejšie sa zobrazí aplikácia pre globálne vyhľadávanie a keď sa vrátim k svojej aplikácii, dialógové okno bolo zatvorené.
Máte nejaký nápad, ako zabrániť zrušeniu dialógového okna?
odpovede:
45 pre odpoveď č. 1Toto funguje (všimnite si, že som to vložil do nástroja na tvorbu dialógových okien):
.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
return true; // Pretend we processed it
}
return false; // Any other keys are still processed as normal
}
})
Možno je dokonca možné chytiť kladné a záporné stlačenie tlačidla a iba s nimi zaobchádzajte, pre všetky ďalšie klávesy vráťte hodnotu true. Boli by ste zvedaví, či na to prídete ...
PS: Niekde som čítal, že v dialógovom okne je viac „dier“, t. J. Môžete sa ich zbaviť bez toho, aby ste na ne stlačili nejaké tlačidlá. Toto bol zjavne jeden. Vie niekto o nejakých ďalších?
35 pre odpoveď č. 2
setCanceledOnTouchOutside(false);
3 pre odpoveď № 3
mProgressDialog.setCancelable(false);
pracoval pre mňa.
1 pre odpoveď č. 4
Dialógy musíte vytvoriť pomocou Aktivít onCreateDialog udalosť, pretože to je bod, v ktorom ich riadi aktivita, a po obnovení aktivity sa obnovia.
Spätné volanie na vytvorenie dialógových okien, ktoré za vás aktivita spravuje (ukladá a obnovuje). Ak používate showDialog(int)
, aktivita zavolá na túto metóduprvýkrát a potom ho zavesiť. Akékoľvek dialógové okno vytvorené touto metódou sa automaticky uloží a obnoví za vás, vrátane toho, či sa zobrazuje. Ak chcete, aby aktivita za vás spravovala dialógové okná ukladania a obnovy, mali by ste túto metódu prepísať a spracovať všetky ID, ktoré sa odovzdajú do showDialog (int). Ak chcete mať príležitosť pripraviť si dialógové okno skôr, ako sa zobrazí, prepíšte onPrepareDialog(int, Dialog)
.
Použitie príkladu:
public class MyClass extends Activity {
// ........ //
static final int DATE_DIALOG_ID = 1;
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
mDay);
}
return null;
}
public void launchSetDate() {
showDialog(DATE_DIALOG_ID);
}
}