/ / Zabrániť zrušeniu programu ProgressDialog po kliknutí na tlačidlo vyhľadávania (Android) - Android, dialógové okno, dialógové okno priebehu

Zabránenie prepusteniu programu ProgressDialog po kliknutí na tlačidlo vyhľadávania (Android) - Android, dialógové okno, progressdialog

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ď č. 1

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