Не удается получить ProgressDialog для отображения в теме - PullRequest
0 голосов
/ 07 апреля 2011

Я видел множество сбоев, пытаясь заставить это работать.У меня есть тема, которая запускается через активность.Поток должен создавать / отображать диалоги прогресса и отклонять их.

Когда я пытался напрямую отобразить ProgressDialog, я получил ошибку, что мой Looper не был подготовлен.Я посмотрел с Looper был реализован.Однако мне пришлось вызвать Looper.loop, чтобы появился диалог прогресса.После того, как оно обнаружилось, приложение перестало работать после вызова Looper.loop.

Я не мог заставить его работать, поэтому искал совершенно новый способ, используя HandlerThread и Handler.Я создаю HandlerThread и запускаю его.Я получаю петлитель из потока и создаю с ним обработчик.Мой ProgressDialog или Toasts вообще не будут отображаться.

Есть ли более простой способ сделать это?

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

U может иметь

private Handler stopProgressHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {         
        setProgressBarIndeterminateVisibility(false);
    }
};
private Handler startProgressHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {         
        setProgressBarIndeterminateVisibility(true);
    }
};

, чтобы при запуске потока запустить progressbar, а после завершения потока можно было остановить progressbar.

 public void closeProgressbar(){
    //bluetoothconnector.onDestroy();
    stopProgressHandler.sendEmptyMessage(0);
 }
public void openProgressbar(){
    //bluetoothconnector.onDestroy();
    startProgressHandler.sendEmptyMessage(0);
 }

Это поможет вызвать progressbar для запуска и остановки. Это будет одним из решений ..

1 голос
/ 07 апреля 2011

Не уверен насчет ProgressDialog, но все, что связано с пользовательским интерфейсом в Android, насколько я знаю, необходимо обновить в потоке пользовательского интерфейса.На самом деле существует простой вспомогательный класс для реализации асинхронной задачи: http://developer.android.com/reference/android/os/AsyncTask.html

В качестве альтернативы, вы можете создать обработчик (который был бы в потоке пользовательского интерфейса) и создать диалог, используя это:

Handler uiHandler;
//Activity onCreate
onCreate(...){
    uiHandler = new Handler();
}

// Somewhere in your other thread, 
uiHandler.postRunnable(new Runnable(){
    @Override
    public void run(){
       // Create or update dialog
       ...
    }
});
0 голосов
/ 01 марта 2012

Последний ответ неправильный ....

должно быть:

setProgressBarIndeterminateVisibility (Boolean.TRUE | Boolean.FALSE);

...