2009-07-30 38 views
6

Tôi có thông báo bắt đầu hoạt động của mình và chuyển thư bằng hàm putExtra() của ý định. Thông báo sau đó được hiển thị cho người dùng trong chức năng onCreate của hoạt động. Khi ứng dụng được khởi động lại do thay đổi định hướng, thông báo được hiển thị lại vì nó vẫn nằm trong dữ liệu được nhóm của mục đích.Thay đổi dữ liệu gói ý định trước khi một hoạt động được tạo lại sau khi thay đổi hướng

Làm cách nào để xóa dữ liệu bổ sung?

tôi thử như sau:

Bundle bundle = getIntent().getExtras(); 
if (bundle.getBoolean("showMessage")) { 
    // ... show message that is in bundle.getString("message") 
    // remove message 
    bundle.remove("showMessage"); 
} 

Nhưng sứ điệp vẫn sẽ được hiển thị sau khi định hướng thay đổi, có vẻ như mục đích sử dụng không phải là người tôi đã thay đổi, nhưng bản gốc. Cách giải quyết duy nhất tôi tìm thấy là lưu showMessage bổ sung trong o nSaveInstanceState(). Có cách nào khác không? Hay đây là con đường để đi?

Trả lời

20

The (đơn giản) Giải pháp là:

Thay vì gọi

bundle.remove("showMessage"); 

bây giờ tôi sử dụng

getIntent().removeExtra("showMessage"); 

trong đó hoạt động như mong đợi. Có vẻ như getIntent(). GetExtras() trả về một bản sao, không phải là một tham chiếu.

+0

Rất tiếc, -1. 'onSaveInstanceState' là đúng cách để làm điều này, như được chỉ ra bởi @CommonsWare. –

9

Cách tiếp cận onSaveInstanceState() của bạn là câu trả lời đúng, AFAIK.

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