2009-12-18 36 views
7

Trong hoạt động của tôi, tôi muốn hiển thị hộp thoại thông tin đơn giản, công cụ như:Hiển thị hộp thoại thông điệp đơn giản

new AlertDialog.Builder(context).setMessage(message).show(); 

nếu tôi làm điều đó, hộp thoại sẽ bị rò rỉ khi tôi xoay rằng điện thoại (chưa kể nó cũng sẽ biến mất, vì vậy người dùng có thể bỏ lỡ nó). Tôi có thể sử dụng các hộp thoại được quản lý, nhưng tôi không chắc cách bạn sử dụng nó một cách hợp lý cho các loại tin nhắn ngắn này? Có vẻ như bạn phải làm điều này:

showDialog(SOME_DLG_ID); 
... 
@Override 
onCreateDialog(int id) { 
    if (id == SOME_DLG_ID) { 
     new AlertDialog.Builder(context).setMessage(message).show(); 
    } 
} 

không có cách nào để chuyển nội dung thư sẽ vào onCreateDialog vì phương pháp ghi đè của nó. Tôi ghét phải tạo một biến thành viên của hoạt động gốc mà chỉ lưu trữ bất kỳ thông điệp hiện tại nào. Làm thế nào để tất cả các bạn làm điều đó?

Cảm ơn

+0

Tôi tin rằng bạn đang mắc kẹt với tùy chọn biến thành viên ... xin lỗi. – rui

+0

yeah trông như vậy, thật đáng tiếc! Cảm ơn – Mark

+0

Yup! Đó là một sự xấu hổ cho nhà phát triển. Chúng ta cần phải viết mã trong một mẫu kỳ lạ như vậy chỉ để hiển thị hộp thoại. –

Trả lời

3

Bạn có thể thực hiện Activity.onPrepareDialog(int, Dialog) chuyển ra thông điệp trước khi hộp thoại được hiển thị trên màn hình. Vì vậy, bạn có thể làm điều gì đó như:

@Override protected void onPrepareDialog(int id, Dialog dialog) { 
    if (id == SOME_DLG_ID) { 
     ((AlertDialog) dialog).setMessage(message); 
    } 
} 

Bạn vẫn phải theo dõi thư bạn hiện đang hiển thị trong hoạt động của mình, nhưng ít nhất theo cách này, bạn không tạo đối tượng Dialog cho từng đối tượng tin nhắn bạn muốn hiển thị.

+1

Vâng vấn đề ở đây là như nhau, bạn không thể vượt qua chuỗi tin nhắn bạn có tại thời điểm bạn gọi showDialog() để onPrepareDialog hoặc onCreateDialog() ... – rui

+0

Ah, xấu của tôi ... Tôi cho rằng tôi hiểu sai câu hỏi . –

+0

Vâng và đây là vấn đề chính thực sự, bạn cần mẫu kỳ lạ này để nhận được chuỗi tin nhắn động vào hộp thoại - nó cảm thấy thực sự khó xử! Cảm ơn – Mark

4

nếu tôi làm điều đó, hộp thoại sẽ bị rò rỉ khi tôi xoay rằng điện thoại (không đề cập đến nó sẽ biến mất như tốt, vì vậy người dùng có thể bỏ lỡ nó)

Bạn có thể thêm

<activity 
    android:configChanges="orientation|keyboardHidden" 
> 

vào AndroidManifest.xml để ngăn khởi động lại hoạt động khi điện thoại quay. Tôi đang sử dụng nó trong ứng dụng của mình và AlertDialog của tôi vẫn tồn tại vòng xoay của điện thoại.

+0

yep, android: configChanges = "orientation" là con đường để đi. nó ngăn cản việc thực hiện "onCreate" và cho phép ứng dụng ở trạng thái tương tự khi xoay điện thoại – datayeah

0

Sử dụng DialogFragment để quản lý hộp thoại đảm bảo rằng nó xử lý chính xác các sự kiện vòng đời chẳng hạn như khi người dùng xoay màn hình hoặc nhấn nút Quay lại.

Các vấn đề liên quan