2015-08-29 37 views
12

Tôi có ứng dụng Android duy trì trạng thái liên quan đến quãng đường, thời gian trôi qua, v.v. Trạng thái này tôi có thể lưu trữ thuận tiện trong đối tượng và lưu trữ tham chiếu đến đối tượng đó trong Gói khi cuộc gọi Android onDestroy() khi người dùng thay đổi hướng màn hình, sau đó khôi phục trạng thái trong onCreate (Bundle savedBundle). Tuy nhiên, tôi cũng có một số trạng thái trong các đối tượng Buttons và EditText trên màn hình mà tôi muốn tồn tại thông qua các định hướng màn hình. Ví dụ, trong onStart (Bundle savedBundle) Tôi gọi:Trạng thái lưu trên Android về thay đổi hướng

_timerButton.setBackgroundColor(Color.GREEN); 
_pauseButton.setBackgroundColor(Color.YELLOW); 
_pauseButton.setEnabled(false); 

Sau đó, trong suốt hoạt động của ứng dụng của tôi, màu sắc/kích hoạt trạng thái của các nút này sẽ được thay đổi. Có cách nào thuận tiện hơn để duy trì trạng thái của các mục giao diện người dùng (EditText, Button objects, vv) mà không cần phải lưu/khôi phục lại từng thuộc tính cho mỗi nút một cách thủ công không? Nó cảm thấy thực sự vụng về để phải tự quản lý loại trạng thái này giữa các định hướng màn hình.

Cảm ơn bạn đã được trợ giúp.

Trả lời

39

Bạn đã cố gắng sử dụng: công việc của mình thông qua

<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/> 

trong tập tin Manifest?

Nó không hoạt động theo mặc định bởi vì, khi bạn thay đổi hướng onCreate sẽ được gọi lại và nó vẽ lại chế độ xem của bạn.

Nếu bạn viết tham số này không cần xử lý trong Hoạt động, khung sẽ đảm nhiệm phần còn lại của mọi thứ. Nó sẽ giữ trạng thái của màn hình hoặc bố trí nếu hướng được thay đổi.

LƯU Ý Nếu bạn đang sử dụng bố cục khác cho chế độ ngang, bằng cách thêm các thông số này, bố cục cho chế độ ngang sẽ không được gọi.

Other wayAnother way

+1

đẹp trả lời, đã giúp tôi hiểu được "configChanges" –

+2

Wow, nó thực sự là đơn giản ... Addi ng dòng này để biểu hiện của tôi giải quyết vấn đề của tôi. Bây giờ tất cả trạng thái của tôi dường như tồn tại thông qua thay đổi định hướng mà không cần phải lưu trạng thái theo cách thủ công trong một Gói. onCreate/onDestroy không còn được gọi là thay đổi hướng. Cám ơn vì cái này! – Intervention

+2

Tôi mới sử dụng Android và tôi không tin điều đó đơn giản. Bắt là gì? Tại sao điều này không được bật theo mặc định? Phải có một số nhược điểm về điều này .. –

5

Để lưu biến của bạn hoặc đánh giá cao bạn nên sử dụng onSaveInstanceState (Bundle); và khi định hướng thay đổi thì nên khôi phục giá trị nên sử dụng onRestoreInstanceState() là tốt, nhưng không phải là rất phổ biến. (onRestoreInstanceState() được gọi sau khi onStart(), trong khi onCreate() được gọi trước khi onStart(). Sử dụng phương pháp đặt để lưu trữ các giá trị trong onSaveInstanceState()

protected void onSaveInstanceState(Bundle icicle) { 
    super.onSaveInstanceState(icicle); 
    icicle.putLong("param", value); 
} 

Và khôi phục giá trị trong onCreate():

public void onCreate(Bundle icicle) { 
    if (icicle != null){ 
    value = icicle.getLong("param"); 
    } 
} 
+1

Cảm ơn bạn đã trả lời.Tôi đã thực sự tìm kiếm một cách để không phải làm công việc quản lý Bundle thủ công này trong onCreate và onSaveInstanceState, đó là lý do tại sao tôi chấp nhận câu trả lời của ranjith - nhưng đây chắc chắn là thông tin tốt để có với câu hỏi này. – Intervention

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