2011-03-08 42 views
4

我有一個微調控制器下拉列表和更改方向的問題。微調控制器下拉列表和屏幕方向更改問題

在我的活動中,我顯示一個對話框,其中有兩個旋鈕。當向用戶顯示對話框並且用戶改變屏幕方向時,一切都正常 - 在我的onPause中,我只是簡單地關閉對話框。

如果用戶點擊微調框,在改變方向之前會向用戶顯示一個下拉列表。但是,當用戶沒有從下拉列表中選擇任何內容時,我遇到了一個錯誤,並且只是在更改方向之前將列表展開。

我已經嘗試了很多事情來解決這個問題(即spinner.setSelection(0)onSaveInstanceState()等)。我的想法是在用戶不選擇項目並且發生方向更改時從代碼中關閉下拉列表。

的誤差約爲Android.WindowLeaked

E/WindowManager(2455): Activity pl.myapp.WebViewActivity has leaked window [email protected] that was originally added here 
E/WindowManager(2455): android.view.WindowLeaked: Activity pl.myapp.WebViewActivity has leaked window [email protected] that was originally added here 
E/WindowManager(2455):  at android.view.ViewRoot.<init>(ViewRoot.java:247) 
E/WindowManager(2455):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
E/WindowManager(2455):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
E/WindowManager(2455):  at android.view.Window$LocalWindowManager.addView(Window.java:424) 
E/WindowManager(2455):  at android.app.Dialog.show(Dialog.java:241) 
E/WindowManager(2455):  at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 
E/WindowManager(2455):  at android.widget.Spinner.performClick(Spinner.java:257) 
E/WindowManager(2455):  at android.view.View$PerformClick.run(View.java:8816) 
E/WindowManager(2455):  at android.os.Handler.handleCallback(Handler.java:587) 
E/WindowManager(2455):  at android.os.Handler.dispatchMessage(Handler.java:92) 
E/WindowManager(2455):  at android.os.Looper.loop(Looper.java:123) 
E/WindowManager(2455):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/WindowManager(2455):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/WindowManager(2455):  at java.lang.reflect.Method.invoke(Method.java:521) 
E/WindowManager(2455):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/WindowManager(2455):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/WindowManager(2455):  at dalvik.system.NativeStart.main(Native Method) 

此外,出現此錯誤:

D/AndroidRuntime(2455): Shutting down VM 
W/dalvikvm(2455): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
E/AndroidRuntime(2455): FATAL EXCEPTION: main 
E/AndroidRuntime(2455): java.lang.IllegalArgumentException: View not attached to window manager 
E/AndroidRuntime(2455): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355) 
E/AndroidRuntime(2455): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200) 
E/AndroidRuntime(2455): at android.view.Window$LocalWindowManager.removeView(Window.java:432) 
E/AndroidRuntime(2455): at android.app.Dialog.dismissDialog(Dialog.java:278) 
E/AndroidRuntime(2455): at android.app.Dialog.access$000(Dialog.java:71) 
E/AndroidRuntime(2455): at android.app.Dialog$1.run(Dialog.java:111) 
E/AndroidRuntime(2455): at android.app.Dialog.dismiss(Dialog.java:268) 
E/AndroidRuntime(2455): at android.widget.Spinner.onDetachedFromWindow(Spinner.java:86) 
E/AndroidRuntime(2455): at android.view.View.dispatchDetachedFromWindow(View.java:6033) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1158) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) 
E/AndroidRuntime(2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) 
E/AndroidRuntime(2455): at android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1630) 
E/AndroidRuntime(2455): at android.view.ViewRoot.doDie(ViewRoot.java:2671) 
E/AndroidRuntime(2455): at android.view.ViewRoot.handleMessage(ViewRoot.java:1948) 
E/AndroidRuntime(2455): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(2455): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(2455): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime(2455): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(2455): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(2455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime(2455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime(2455): at dalvik.system.NativeStart.main(Native Method) 

編輯

SOLUTION:

最後我發現了什麼導致此* &#$%錯誤。在清單中,我有 android:configChanges =「orientation」,當我將其更改爲android:configChanges =「keyboardHidden | orientation」問題消失了!

Thx 4 help!

回答

1

我有一個idea to prevent orientation changes當與微調對話框顯示,但發現there is no reliable way to do that。我找到的最佳解決方案是replace spinner with a button

+0

這可能是最好的方法。 – NitroG42 2012-07-16 09:47:28

+0

的確如此,這不是最好的方法。請參閱http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange中的說明並自行保存並恢復狀態。大多數情況下,您需要在頁面頂部執行解釋:「要正確處理重新啓動,重要的是您的活動通過正常的Activity生命週期恢復其以前的狀態,其中Android調用onSaveInstanceState( ),然後再銷燬你的活動,這樣你就可以保存關於應用程序狀態的數據,然後你可以在onCreate()或onRestoreI ...中恢復狀態......「 – 2013-08-28 15:37:51

0

發生這種情況是因爲onDetachedFromWindow()在調用dialog.dismiss()時未在調試器上調用。對此的解決方案是創建一個簡單的自定義微調類,公開此方法。

public class DialogSpinner extends Spinner { 

    public DialogSpinner(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public void onDetachedFromWindow() { 
     super.onDetachedFromWindow(); 
    } 
} 

現在onDetachedFromWindow()方法是公開可用的。然後在對話類中重寫onPause()方法。

@Override 
public void onPause() { 
    mYourSpinner.onDetachedFromWindow(); 
    super.onPause(); 
} 

這絕對是一種解決方法,但它似乎在做伎倆。