2011-08-26 40 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中。