Có thể bất cứ ai giúp tôi biết về Bundle savedInstanceState
trong onCreate(Bundle savedInstanceState)
I am newbie trong Android. Tôi cố gắng hiểu nó từ developer.android.com. Nhưng tôi không thể hiểu được. Bất cứ ai có thể đơn giản hóa nó?
Có thể bất cứ ai giúp tôi biết về Bundle savedInstanceState
trong onCreate(Bundle savedInstanceState)
I am newbie trong Android. Tôi cố gắng hiểu nó từ developer.android.com. Nhưng tôi không thể hiểu được. Bất cứ ai có thể đơn giản hóa nó?
Câu trả lời:
Nếu bạn lưu trạng thái của ứng dụng trong một gói (thường là dữ liệu động, không liên tục onSaveInstanceState
), nó có thể được chuyển trở lại onCreate
nếu hoạt động cần được tạo lại (ví dụ: thay đổi hướng) để bạn không mất dữ liệu này trước đó thông tin. Nếu không có dữ liệu nào được cung cấp, savedInstanceState
là null.
... bạn nên sử dụng phương thức onPause () để ghi bất kỳ dữ liệu liên tục nào (chẳng hạn như các chỉnh sửa của người dùng) vào bộ nhớ. Ngoài ra, phương thức onSaveInstanceState (Bundle) được gọi trước khi đặt hoạt động ở trạng thái nền như vậy, cho phép bạn lưu bất kỳ trạng thái phiên bản động nào trong hoạt động của mình vào Gói đã cho, để sau này nhận được trong onCreate (Gói) nếu hoạt động cần được tạo lại. Xem phần Vòng đời quy trình để biết thêm thông tin về cách vòng đời của quy trình gắn liền với các hoạt động mà nó đang lưu trữ. Lưu ý rằng điều quan trọng là phải lưu dữ liệu liên tục trong onPause () thay vì onSaveInstanceState (Bundle) vì phần sau không phải là một phần của các lệnh gọi lại vòng đời, vì vậy sẽ không được gọi trong mọi tình huống như được mô tả trong tài liệu của nó.
onCreate(Bundle savedInstanceState)
bạn sẽ nhận được Bundle
giá trị rỗng khi hoạt động bắt đầu lần đầu tiên và nó sẽ được sử dụng khi hướng hoạt động thay đổi .......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android cung cấp một cách khác để đạt được điều này. Để đạt được điều này, chúng ta phải ghi đè một phương thức được gọi onSaveInstanceState()
. Nền tảng Android cho phép người dùng lưu bất kỳ trạng thái phiên bản nào. Trạng thái phiên bản có thể được lưu trong Gói. Gói được truyền dưới dạng đối số cho phương thức onSaveInstanceState.
chúng ta có thể tải trạng thái phiên bản đã lưu từ Gói được truyền dưới dạng đối số cho onCreate
phương thức. Chúng ta cũng có thể tải trạng thái phiên bản đã lưu trong onRestoreInstanceState
phương thức. Nhưng tôi sẽ để điều đó cho độc giả tìm hiểu.
savedInstanceState
sẽ không phải null
nếu onSavedInstanceState()
trước đó đã được gọi. thay đổi hướng chỉ là một ví dụ mà điều này có thể xảy ra.
Bundle
đối số onCreate(Bundle)
sẽ không phải là null
nếu và chỉ khi phương thức Activity
của nó onSaveInstanceState
đã được gọi trước đó. Điều này xảy ra trong quá trình thay đổi hướng ... và cũng xảy ra khi hoạt động quay trở lại sau khi bị hệ điều hành loại bỏ và khi bạn kích hoạt bất kỳ thay đổi cấu hình nào khác mà thiết bị của bạn quan tâm.
Như Dhruv Gairola đã trả lời, bạn có thể lưu trạng thái của ứng dụng bằng cách sử dụng Bundle saveInstanceState. Tôi đang cố gắng đưa ra một ví dụ rất đơn giản mà những người mới học như tôi có thể hiểu một cách dễ dàng.
Giả sử, bạn có một phân đoạn đơn giản với một TextView và một nút. Mỗi lần bạn nhấp vào nút, văn bản sẽ thay đổi. Bây giờ, hãy thay đổi hướng của thiết bị / trình giả lập của bạn và nhận thấy rằng bạn đã mất dữ liệu (có nghĩa là dữ liệu đã thay đổi sau khi nhấp vào bạn nhận được) và phân đoạn bắt đầu lại như lần đầu tiên. Bằng cách sử dụng Bundle saveInstanceState, chúng ta có thể loại bỏ điều này. Nếu bạn nhìn vào cuộc sống của mảnh vỡ. Fragment Lifecylce bạn sẽ nhận được rằng một phương thức "onSaveInstanceState" được gọi khi phân mảnh sắp bị phá hủy.
Vì vậy, chúng ta có thể lưu trạng thái có nghĩa là giá trị văn bản đã thay đổi vào gói đó như thế này
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
Sau khi bạn thực hiện định hướng, phương thức "onCreate" sẽ được gọi phải không? vì vậy chúng tôi chỉ có thể làm điều này
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
Bây giờ, bạn sẽ không mất giá trị của mình sau khi định hướng. Giá trị đã sửa đổi sẽ luôn được hiển thị.
Hàm onCreate (Bundle saveInstanceState) trong Android:
1) Khi một Activity lần đầu tiên được gọi hoặc khởi chạy thì phương thức onCreate (Bundle saveInstanceState) có trách nhiệm tạo hoạt động.
2) Khi nào hướng (tức là từ ngang sang dọc hoặc dọc sang ngang) của hoạt động bị thay đổi hoặc khi một Hoạt động bị bất kỳ Hệ điều hành nào buộc phải chấm dứt thì đối tượng SaveInstanceState tức là đối tượng của Lớp gói sẽ lưu trạng thái của một Hoạt động.
3) Sau khi Định hướng được thay đổi thì onCreate (Bundle đã lưuInstanceState) sẽ gọi và tạo lại hoạt động và tải tất cả dữ liệu từ SaveInstanceState.
4) Về cơ bản, lớp Bundle được sử dụng để lưu trữ dữ liệu hoạt động bất cứ khi nào điều kiện trên xảy ra trong ứng dụng.
5) onCreate () không bắt buộc đối với các ứng dụng. Nhưng lý do nó được sử dụng trong ứng dụng là vì phương thức đó là nơi tốt nhất để đặt mã khởi tạo.
6) Bạn cũng có thể đặt mã khởi tạo của mình trong onStart () hoặc onResume () và khi ứng dụng của bạn tải đầu tiên, nó sẽ hoạt động giống như trong onCreate ().