2010-09-11 53 views
6

Làm thế nào để khôi phục hộp thoại vv sau khi xoay màn hình? Ví dụ, bật lên một alertDialog để cho người dùng biết một số thông tin. sau đó người dùng xoay màn hình sang hướng khác. Làm thế nào để khôi phục alertDialog? Có ai hướng dẫn tôi làm điều đó không? Cảm ơn!Android: Dialog etc khôi phục sau khi xoay thay đổi

Nối sau:

Tôi nhìn vào mã nguồn Android và tìm những điều sau:

Dialogs được lưu trữ trong mManagedDialogs, và các thông tin liên quan là:

mManagedDialogs = new SparseArray<ManagedDialog>(); 

onSaveInstanceState liên quan:

final void performSaveInstanceState(Bundle outState) { 
    onSaveInstanceState(outState); 
    saveManagedDialogs(outState); 
} 

Trong saveManagedDialogs, nó có liên quan đến mManagedDialogs.

onRestoreInstanceState liên quan:

final void performRestoreInstanceState(Bundle savedInstanceState) { 
    onRestoreInstanceState(savedInstanceState); 
    restoreManagedDialogs(savedInstanceState); 
} 

Trong restoreManagedDialogs, nó có cái gì để làm với mManagedDialogs.

Như bạn có thể thấy, đối với tính năng nâng cao, bạn phải tự mình thực hiện công việc lưu và khôi phục. Nó có thể là một đêm khi bạn có tấn hộp thoại tùy chỉnh. Tôi đã không thử hộp thoại phức tạp (có đầu vào EdiText, listView, nói). Bằng cách này, tôi muốn cảnh báo người dùng: Không bao giờ xoay màn hình khi nhập thông tin của bạn vào hộp thoại ... HOẶC, khóa xoay động khi hiển thị hộp thoại.

Cảm ơn tất cả những người đã trả lời tôi. Hy vọng thông tin của tôi cũng giúp bạn.

+1

Làm thế nào để giải quyết vấn đề này hiện nay: http://stackoverflow.com/a/15729764/842697 –

Trả lời

-16

Cách tiếp cận tôi đã thực hiện là không cho phép hệ điều hành khởi động lại hoạt động của bạn sau khi thay đổi cấu hình bố cục. Để thực hiện điều này, thêm dòng này trong hoạt động mà bạn muốn ngăn chặn việc khởi động lại trong file manifest của bạn:

<activity 
android:configChanges="orientation|keyboard" 
... 
> 

Tùy chọn, bạn có thể xử lý các thay đổi cấu hình trong mã trong trường hợp có một số bố trí thay đổi bạn muốn thực hiện bằng tay , chẳng hạn như tải lại chế độ xem mới từ XML. Này được thực hiện bằng cách ghi đè phương pháp onConfigurationChanged() trong lớp Hoạt động của bạn:

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    //Handle config changes here, paying attention to 
    //the newConfig.orientation value 
    super.onConfigurationChanged(newConfig); 
} 

Edit: Added "| bàn phím" vào danh sách các cấu hình thay đổi

+0

Không, sự thay đổi này đến file manifest chỉ đơn giản dừng lại Android từ khởi động lại hoạt động của bạn khi mà cấu hình cụ thể thay đổi (định hướng) xảy ra. Nó sẽ không ngừng màn hình quay.Bạn cũng có thể muốn thêm 'bàn phím' cho điện thoại bằng bàn phím trượt ra ngoài, vì điều đó cũng sẽ kích hoạt khởi động lại. –

+0

Bạn đã đúng! Tôi đã thêm android: configChanges = "orientation | keyboard" và nó hoạt động! Cảm ơn nhiều! –

+13

Hoạt động nhưng không được khuyến nghị. –

5

Nó được xử lý cho bạn chừng nào bạn sử dụng Hoạt động # ShowDialog để hiển thị nó và Hoạt động # onCreateDialog để tạo ra nó: http://developer.android.com/reference/android/app/Activity.html#showDialog%28int%29

http://developer.android.com/reference/android/app/Activity.html#onCreateDialog%28int,%20android.os.Bundle%29

+0

Vui lòng xem văn bản được thêm sau này của tôi. –

+0

+1 cho điều này. Tôi thậm chí còn có thể lồng các hộp thoại của mình - nút tích cực của hộp thoại đầu tiên của tôi khởi chạy hộp thoại "Xác nhận" khi thao tác liên quan đến việc xóa dữ liệu. – barry

+0

Không được chấp nhận trong API 13 ("Sử dụng DialogFragment thay thế") – Jeremy

-5

Thêm như thế này trong bạn thẻ hoạt động trong manifest

<activity android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:name=".your.package"/> 
Các vấn đề liên quan