2011-08-26 36 views
0

我有一個啓動AsyncTask的活動。這個AsyncTask在onPostExecute中使用AutoCompleteTextView.showDropDown()。問題是,當AsyncTask正在運行時,我按「返回」,應用程序在showDropDown()行拋出異常,因爲AsyncTask仍在使用AutoCompleteTextView。如何解決這個問題? (最好的方法)當AsyncTask使用小部件時,活動關閉

更新:我仍然不滿意sonykuba的解決方案。使用非最終靜態變量時,這不是一個好習慣。我想從活動中解耦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) 

回答

0

我有一個解決方案。的AsyncTask的所有者具有的功能:

public void setSearchBar(final AutoCompleteTextView searchBar) { 
    this.searchBar = searchBar; 
} 
  • 當我需要使用它,我會檢查它是否爲空。如果沒有,請調用showDropDown()。

  • 當Activity被破壞時,我將它設置爲null。

owner.setSearchBar(空);

1

最簡單的方法是有某種靜態布爾,並把TRUE到它的onResume和FALSE中的onPause Activity類的。然後把if語句放在onPostExecute中。

相關問題