Деятельность закрыта, когда AsyncTask использует виджет - PullRequest
0 голосов
/ 26 августа 2011

У меня есть действие, которое запускает AsyncTask.Этот AsyncTask использует AutoCompleteTextView.showDropDown () в onPostExecute.Проблема в том, что когда AsyncTask работает, я нажимаю «Назад» и приложение выдает исключение в строке showDropDown (), потому что AsyncTask все еще использует AutoCompleteTextView.Как решить эту проблему?(лучший способ)

Обновление: Я до сих пор не удовлетворен решением соникуба.Это не очень хорошая практика при использовании не финальной статической переменной.Я хочу отделить AsyncTask от действия, но не могу придумать более подходящих решений для этого.

Обновление: Добавить исключение

09-05 13:41:05.536: ERROR/AndroidRuntime(962): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.ViewRoot.setView(ViewRoot.java:505)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.widget.PopupWindow.invokePopup(PopupWindow.java:828)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:740)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1207)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at com.megadict.business.recommending.RecommendTaskInitializer$2.onPostExecute(RecommendTaskInitializer.java:58)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at com.megadict.business.recommending.AbstractRecommendTask.onPostExecute(AbstractRecommendTask.java:29)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at com.megadict.business.recommending.RecommendTask.onPostExecute(RecommendTask.java:37)

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Самый простой способ - это иметь какой-то статический логический тип и помещать в него значение TRUE onResume и FALSE в классе onPause класса Activity.Затем поместите оператор if в onPostExecute.

0 голосов
/ 12 октября 2011

У меня было решение. Владелец AsyncTask имеет функцию:

public void setSearchBar(final AutoCompleteTextView searchBar) {
    this.searchBar = searchBar;
}
  • Когда мне понадобится использовать его, я проверю, является ли оно нулевым. Если нет, вызовите showDropDown ().

  • Когда действие уничтожается, я устанавливаю его на ноль.

owner.setSearchBar (нуль);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...