2014-02-05 7 views
1

У меня есть диалог прогресса, который реализовал метод onCancel, потому что я хочу отменить его, когда пользователь нажимает клавишу возврата, но проблема в том, что когда пользователь нажимает на экран, диалог отменяется, вызывается метод OnCancel.Метод Dialog onCancel вызывается, когда пользователь нажимает на экран

Как я могу избежать этого?

Это код:

public void showProgressDialog(Context ctx, String text_connecting) { 
    if (this.progress == null) { 
     this.progress = ProgressDialog.show(ctx, "", text_connecting, true, 
       true); 
     this.progress.setOnCancelListener(new OnCancelListener() { 
      public void onCancel(DialogInterface dialog) { 
       hideProgressDialog(); 
      } 
     }); 
    } 
    this.progress.show(); 
} 
+0

Вы должны проверить, если диалог прогресс отображается в данный момент (в потоке), если отображается трек событие движения в потоке. Если движение отключено при отображении set cancel, возможно, значение false. Вы также можете использовать локальную трансляцию, если хотите избавиться от постоянного опроса и поддержания занятости процессора. – Skynet

+0

Еще одним решением было бы переопределить ваш onBackPress. Установите диалог для отмены и нажмите на кнопку отменить. Таким образом, ваш диалог не будет отменен при касании. Вот как это и правильно! – Skynet

ответ

0

Вы должны проверить, если в настоящее время отображается диалоговое окно прогресса (в потоке), если отображается трек событие движения в потоке. Если движение отключено при отображении set cancel, возможно, значение false. Вы также можете использовать локальную трансляцию, если хотите избавиться от постоянного опроса и поддержания занятости процессора.

Что-то вроде:

@Override 
     public void run() { 


      if(progress.isShowing() &&(checkTheVariableYouSetInMotionEventDownHere){ 
        progress.setCancellable(false); 
         } 
     } 
    }; 

его просто немного Hack, вы можете улучшить на вышеуказанную логику больше, чтобы сделать это глупое доказательство.

Вторым способом будет проверка самого события движения и установка его отмены.

+0

wtf, спасибо, но я просто хочу показать простой отменяемый диалог – NullPointerException

+0

Еще одним решением было бы переопределить ваш onBackPress. Установите диалог для отмены и нажмите на кнопку отменить. Таким образом, ваш диалог не будет отменен при касании. Вот как это и правильно! – Skynet

+0

Может быть, я неверно истолковал ваш вопрос, если вы установили диалог на Dialog.cancelable (false), он не будет отменен, пока не будет вызван диалог dialog.dismiss(). – Skynet

0

хорошо, я, наконец, решить, что делать эту InstEd предыдущего кода на мой вопрос

public boolean onKey(DialogInterface arg0, int arg1, KeyEvent arg2) { 
        if (arg1 == KeyEvent.KEYCODE_BACK) { 
         hideProgressDialog(); 
        } 
        return true; 
       } 
0

Вы можете сделать

this.progress.setCanceledOnTouchOutside(false); 

Это предотвратит ProgressDialog от закрытия любого случайного прикосновения экран. Однако кнопка «Назад» все равно отменит ее.

0

использовать этот код для справки, взгляните на link

this.progress.setCanceledOnTouchOutside(false); 
Смежные вопросы