2013-06-11 44 views
5

tôi đã thực hiện một máy nghe nhạc phương tiện truyền thông trong android nó làm việc rất tốt nhưng khi tôi thay đổi hướng màn hình, hoạt động này đã được khởi động lại tôi biết rằng câu hỏi này đã được hỏi về stackoverflow nhiều lần nhưng không ai trong số các câu trả lời đã giúp tôi. tôi nghĩ rằng tôi nên sử dụng: onRetainNonConfigurationInstancelàm thế nào để thực hiện onRetainNonConfigurationInstance

@Override 
public Object onRetainNonConfigurationInstance() { ... } 

nhưng tôi không biết cách chính xác để thực hiện nó vì vậy nếu ai đó có thể cho tôi một hướng dẫn hoặc một ví dụ ngầm tôi sẽ biết ơn

Trả lời

5

Tôi tin rằng onRetainNonConfigurationInstance() không còn được dùng nữa. Nó sẽ cho bạn biết sử dụng Fragments để thay thế. Here là liên kết đến tài liệu Fragment. Về cơ bản, bạn sẽ đặt giao diện người dùng và dữ liệu của mình vào tùy chỉnh Fragment, sau đó sử dụng FragmentManager để lưu trữ phiên bản Fragment của bạn. Sau đó, khi hoạt động khởi động lại, bạn có thể tìm nạp Fragment và đặt lại vị trí khi cần.

+1

Tôi hiện đang sử dụng một sợi riêng biệt đối với một số thứ, tôi có thể tưởng tượng rằng mảnh vỡ sẽ không làm các trick ở đó. –

3

Đừng bận tâm rằng nó đã được khắc phục, nó hoạt động tốt. Đơn giản nhất sẽ là:

public Object onRetainNonConfigurationInstance() { 
    return this; 
} 

Sau đó, trong YourActivity 's onCreate()

public void onCreate(Bundle savedState) 
{ 
    YourActivity prevActivity = (YourActivity)getLastNonConfigurationInstance(); 
    if(prevActivity!= null) { 
     // So the orientation did change 
     // Restore some field for example 
     this.myValue = prevActivity.myValue; 
    } 
} 
+0

Tôi xin lỗi, nó có thể là một câu hỏi ngu ngốc, nhưng tôi nên đặt tất cả các thuộc tính tôi muốn lưu trên onRetainNonConfigurationInstance() ?????? – AndroidM

+0

Tôi có nên thêm thứ gì đó vào tệp kê khai không ?? – AndroidM

+0

Có, mọi thứ bạn muốn lưu dưới dạng một đối tượng duy nhất. Vì vậy, khi bạn trả lại toàn bộ Activity bạn sẽ lấy lại mọi thứ nhưng có lẽ quá nhiều có lẽ bạn chỉ cần một hoặc hai trường để bạn có thể trả về đối tượng MyState của riêng bạn. Không, không cần thay đổi tệp kê khai nào. –

0

gọi bởi hệ thống, như một phần của destroying một activity do sự thay đổi cấu hình, khi nó được biết rằng một phiên bản mới sẽ ngay lập tức được tạo cho cấu hình mới. Bạn có thể trả về bất kỳ đối tượng nào bạn thích ở đây, kể cả bản thân hoạt động, sau này có thể được truy xuất bằng cách gọi getLastNonConfigurationInstance() trong phiên bản hoạt động mới. Nếu bạn đang nhắm mục tiêu HONEYCOMB trở lên, hãy xem xét thay vì sử dụng Fragment với Fragment.setRetainInstance(boolean).

Giữ ba điều trong tâm trí khi sử dụng onRetainNonConfigurationInstance(),

  • Chức năng sẽ được gọi giữa onStop() và onDestroy().
  • Một phiên bản mới của hoạt động sẽ luôn được tạo ngay lập tức sau khi phương thức onDestroy() này được gọi. Đặc biệt, không có thông báo nào sẽ được gửi đi trong thời gian này (khi đối tượng được trả về không không có hoạt động nào được liên kết với).
  • Đối tượng bạn quay lại đây sẽ luôn có sẵn từ phương thức getLastNonConfigurationInstance() của hoạt động sau đây ví dụ như được mô tả ở đó.
  • Khi Bạn đang sử dụng AppCompatActivity bạn không thể sử dụng onRetainNonConfigurationInstance(), thay vào đó là sự thay thế onRetainCustomNonConfigurationInstance()
Các vấn đề liên quan