我有一个启动AsyncTask的Activity。此AsyncTask在onPostExecute中使用AutoCompleteTextView.showDropDown()。问题是当AsyncTask运行时,我按“Back”并且应用程序在showDropDown()行抛出异常,因为AsyncTask仍在使用AutoCompleteTextView。如何解决这个问题? (最好的方式)
更新:我对sonykuba的解决方案仍然不满意。使用非最终静态变量时,这不是一个好习惯。我想将AsyncTask与Activity分离,但无法想出更好的解决方案。
更新:添加例外
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 :(得分:1)
最简单的方法是使用某种静态布尔值,并在onPause of Activity类中将onResume和FALSE设置为TRUE。然后将if语句放在onPostExecute中。
答案 1 :(得分:0)
我有一个解决方案。 AsyncTask的所有者有一个功能:
public void setSearchBar(final AutoCompleteTextView searchBar) {
this.searchBar = searchBar;
}
当我需要使用它时,我会检查它是否为空。如果没有,请调用showDropDown()。
当Activity破坏时,我将其设置为null。
owner.setSearchBar(空);