2012-04-23 4 views
6

ich habe ein ProgressDialog wie folgt umgesetzt:Warum hört mein ProgressDialog auf ANY KEY (touch) anstelle von backbutton auf?

// show progress dialog while date is loading 
     progressDialog = ProgressDialog.show(XYActivity.this, getResources().getString(R.string.progress_dialog_please_wait), getResources().getString(R.string.progress_dialog_loading), true); 
     progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog) { 
       cancel(true); 
       Log.w(LOGTAG, "loading cancelled via back button"); 
      } 

     }); 
     progressDialog.setCancelable(true); 

Diese ProgressDialog innerhalb eines AsyncTask (PreExecute) umgesetzt wird, so dass die cancel (true) Methode, um die AsyncTask stoppt. Das alles funktioniert gut.

Das Problem ist, dass ich die ProgressDialog mit jedem beliebigen Touch auf meinem Bildschirm stornieren. Ich möchte den Dialog nur durch Drücken der Zurück-Taste schließen. Bitte hilf mir! Danke Jungs.

Antwort

7

Das ist für mich gearbeitet:

@Override 
protected void onPreExecute() { 
    progressDialog = ProgressDialog.show(context, "Title", "Loading...", true, true, new OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog) { 
      cancel(true); 
     } 
    }); 
    progressDialog.setCanceledOnTouchOutside(false); 
} 

Die von GedankenNebel vorgeschlagen setCanceledOnTouchOutside ziemlich sauber ist.

1

versuchen unter Anweisung

nicht sicher über die ganze Taste abbrechen ... Ich habe gehört, Berichte über die onCancel() -Methode nicht richtig schießen. Meine Lösung besteht nur darin, eine normale Schaltfläche im Dialog zu erstellen, mit einem Aufruf, wann immer die Schaltfläche gedrückt wird.

private void createCancelProgressDialog(String title, String message, String buttonText) 
{ 
    cancelDialog = new ProgressDialog(this); 
    cancelDialog.setTitle(title); 
    cancelDialog.setMessage(message); 
    cancelDialog.setButton(buttonText, new DialogInterface.OnClickListener() 
    { 
     public void onClick(DialogInterface dialog, int which) 
     { 
      // Use either finish() or return() to either close the activity or just the dialog 
      cancelDialog.dismiss(); 
     } 
    }); 
    cancelDialog.show(); 
} 

verwenden Sie dann nur eine einfache Call-Methode von an anderer Stelle in Ihrer Tätigkeit

createCancelProgressDialog("Loading", "Please wait while activity is loading", "Cancel"); 

recht einfache Lösung, aber es funktioniert den Trick;) auch nur zu beachten, dass cancelDialog eine Aktivität wischt variabel ist, wenn Sie müssen es nicht von woanders aus aufrufen, dann sollten Sie in der Lage sein, den Umfang der Variablen auf diese Methode zu beschränken.

+0

danke, nach dem Hinzufügen '' cancelDialog.setCancelable (false); 'zu Ihrem Code hat dies für mich funktioniert, aber ich fand eine einfachere Lösung siehe meine unten – GedankenNebel

+15

Ich fand eine Lösung mit der' progressDialog.setCanceledOnTouchOutside (false); ':))) – GedankenNebel

+1

ok ..! Wie dein Problem gelöst wurde ...! Vielen Dank..! – Dinesh

Verwandte Themen