активность предпочтений Android

#android #android-activity #preference

#Android #android-активность #предпочтения

Вопрос:

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

Написанный код — это:

  public boolean onPreferenceClick(Preference preference) {
  showProgressDialog();
  new Thread(new Runnable() {
   public void run() {
    doSomething();
    hideProgressDialog();
   }       //Runnable.run()
  }).start();
  return false;
 }
});
  

Но приведенный выше код не показывает диалоговое окно прогресса. и возникает ошибка ANR.

Спасибо.

Комментарии:

1. Включили ли вы «Implements Runnable» в начале класса, где вы также реализовали OnSharedPreferenceChangeListener?

2. При заголовках вопросов я бы рекомендовал сосредоточиться на реальной проблеме. Например, по этому вопросу я бы назвал его «ProgressDialog не отображается» или что-то в этомроде. Ваша активность предпочтений, скорее всего, не имеет к этому никакого отношения.

Ответ №1:

Добавьте следующий код в свой класс activity:

 // Need handler for callbacks to UI Threads
    // For background operations
    final Handler mHandler = new Handler();

    // Create Runnable for posting results
    final Runnable mUpdateDone = new Runnable() {
        public void run() {
            progDialog.hide();      
            // Do your task here what you want after the background task is finished.           
        }
    };
  

Напишите следующий код в onPreferenceClick:

 progDialog = ProgressDialog.show(AddPhoto.this, "", "Uploading Photo...");
            new Thread() {
                public void run() {
                    // Start your task here.....                                                        
                    mHandler.post(mUpdateDone);
                }
                }.start();
  

Дайте мне знать, если у вас не сработает!

Комментарии:

1. Спасибо. но это не работает. Отображается диалоговое окно выполнения, которое не запускается после запуска фоновой задачи. Отображается окно принудительного закрытия ANR.

2. Просто убедитесь, что ваша ФОНОВАЯ задача не вызывает принудительного закрытия ANR. Вполне похоже, что doSomething(); это приведет к ошибке. Вы просматривали журнал Cat? Вставьте код задачи, которую вы выполняете в фоновом режиме.

3. Спасибо. я исправил ошибку. ошибка возникает из-за фоновой службы (doSomething). я создал новый поток в службе. Теперь все работает нормально. Спасибо.

4. Привет, Картика, если ты нашел ответ полезным, пожалуйста, отметьте его как правильный ответ, спасибо, Гуру

Ответ №2:

Я еще не внедрил диалоговое окно прогресса (планирую позже сегодня), но этот пример выглядит как хороший. Я планирую использовать это сам. Я отмечаю, что она выполняет ряд действий, которых не выполняет ваш код.