2012-09-06 6 views
13

mostro il mio barra di avanzamento infinte nella barra delle operazioni "come al solito":Android: come disabilitare i controlli durante la barra di avanzamento è attivo

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
... 
setProgressBarIndeterminateVisibility(true); 
... 
setProgressBarIndeterminateVisibility(false); 

e il vero lavoro è fatto in un thread in background (AsyncTask)

Il problema: tutti i controlli sull'interfaccia utente sono abilitati, quindi l'utente può continuare a modificare i dati sottostanti prima che il processo di lunga durata sia terminato.

La semplice disattivazione di tutti i controlli non è possibile perché quando si disabilita un EditText, anche la tastiera viene chiusa automaticamente da Android.

Qualche idea su come impedire l'input dell'utente durante il lavoro in background?

Grazie,

Chris

risposta

4

cercano di mettere progressDialog.setcancelable(false);

+0

non ho ProgressBar (vedi sopra) – cor

+0

come pensate di mostrare all'utente che si sta facendo somethng in background e non volete a qualsiasi utente di toccare anythng ..... il modo migliore è utilizzare il progressodialog che mostra il caricamento sullo schermo .... –

+1

il mio frammento di codice sopra mostra già un cerchio di progresso infinito nell'angolo destro della barra delle azioni – cor

2

Si sta tentando di impostare solo la proprietà di attività. Invece far apparire una finestra utilizzando ProgressDialog, in modo che Ui non sarà accessibile

ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", true); 

Edit: Se non si desidera utilizzare ProgressDialog, ottenere il layout Radice e chiamare

layout.setEnabled(false) 
+0

Conosco la barra di avanzamento ma non voglio usarla in questo caso. – cor

+0

Quindi si desidera disattivare l'intero layout? – nandeesh

+0

attenuato o almeno "readonly" (= nessun controllo può essere modificato, nessun pulsante premuto, ....) – cor

6

Quello che può fare è aprire una finestra invisibile e impedire che sia cancellabile. Mostrerà tutto ciò che è sotto, ma disabilita tutte le interazioni dell'utente sottostanti. Poi, una volta che hai finito con il vostro business è sufficiente respingere e andare avanti con la tua vita:

Dialog mOverlayDialog = new Dialog(mContext, android.R.style.Theme_Panel); //display an invisible overlay dialog to prevent user interaction and pressing back 
mOverlayDialog.setCancelable(false); 
mOverlayDialog.show(); 
+0

soluzione più semplice –

1

nel caso in cui, se qualcun altro ha affrontato lo stesso problema,

per disattivare la modifica dell'uso del testo: EditText.setFocusable(false);

per abilitare la modifica: EditText.setFocusableInTouchMode(true);

Problemi correlati