Một bundle
ứng dụng Android là gì? Khi nào sử dụng nó?
Một bundle
ứng dụng Android là gì? Khi nào sử dụng nó?
Câu trả lời:
Các gói thường được sử dụng để truyền dữ liệu giữa các hoạt động khác nhau của Android. Nó phụ thuộc vào bạn loại giá trị bạn muốn vượt qua, nhưng các gói có thể chứa tất cả các loại giá trị và chuyển chúng sang hoạt động mới.
Bạn có thể sử dụng nó như thế này:
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
Bạn có thể nhận được các giá trị được thông qua bằng cách thực hiện:
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
Bạn có thể tìm thêm thông tin tại:
Truyền dữ liệu giữa các hoạt động bằng cách sử dụng Bundle
và Intent
các đối tượng.
Lần đầu tiên bạn tạo một Bundle
đối tượng
Bundle b = new Bundle();
Sau đó, liên kết dữ liệu chuỗi được lưu trữ anystring
với khóa bó"myname"
b.putString("myname", anystring);
Bây giờ, tạo một Intent
đối tượng
Intent in = new Intent(getApplicationContext(), secondActivity.class);
Truyền đối tượng bó b
cho mục đích
in.putExtras(b);
và bắt đầu hoạt động thứ hai
startActivity(in);
Trong hoạt động thứ hai, chúng ta phải truy cập dữ liệu được truyền từ hoạt động đầu tiên
Intent in = getIntent();
Bây giờ, bạn cần lấy dữ liệu từ gói
Bundle b = in.getExtras();
Cuối cùng, lấy giá trị của dữ liệu chuỗi được liên kết với khóa có tên "myname"
String s = b.getString("myname");
Tôi phải thêm rằng các gói được sử dụng bởi các hoạt động để truyền dữ liệu cho chính chúng trong tương lai.
Khi màn hình xoay hoặc khi một hoạt động khác được bắt đầu, phương thức protected void onSaveInstanceState(Bundle outState)
được gọi và hoạt động bị hủy. Sau đó, một phiên bản khác của hoạt động được tạo và public void onCreate(Bundle savedInstanceState)
được gọi. Khi phiên bản đầu tiên của hoạt động được tạo, gói là null; và nếu gói không phải là null, hoạt động tiếp tục một số doanh nghiệp được bắt đầu bởi người tiền nhiệm của nó.
Android tự động lưu văn bản trong các trường văn bản, nhưng nó không lưu tất cả mọi thứ và đôi khi các lỗi tinh vi xuất hiện.
Mặc dù vậy, kiểu chống phổ biến nhất là giả định rằng onCreate()
chỉ khởi tạo. Đó là sai, vì nó cũng phải khôi phục lại trạng thái.
Có một tùy chọn để vô hiệu hóa hành vi "tạo lại hoạt động xoay vòng" này, nhưng nó sẽ không ngăn chặn các lỗi liên quan đến khởi động lại, nó sẽ chỉ khiến chúng khó đề cập hơn.
Cũng lưu ý rằng phương thức duy nhất có cuộc gọi được đảm bảo khi hoạt động sắp bị hủy là onPause()
. (Xem biểu đồ vòng đời hoạt động trong các tài liệu.)
A Bundle
rất giống một Map
đối tượng Java ánh xạ String
các khóa thành các giá trị. Nó được sử dụng để truyền thông tin giữa các hoạt động và các thành phần ứng dụng khác. Nó cũng được sử dụng bởi khung để nắm bắt và khôi phục thông tin trạng thái.
Lý do Android không sử dụng Map
các đối tượng cũ đơn giản cho việc này Map
là quá linh hoạt; nó có thể chứa các đối tượng (chẳng hạn như các luồng I / O) không thể được tuần tự hóa. Các Bundle
API hạn chế các loại của các đối tượng có thể được thêm vào một bó theo cách như vậy mà nội dung của gói có bảo đảm là serializable. Khung Android dựa vào tài sản này.
Tôi đề nghị bạn nên đọc tài liệu về Nguyên tắc ứng dụng . Điều này giải thích, trong số những thứ khác, gói và ý định là gì và chúng được sử dụng để làm gì.
Các gói có thể được sử dụng để gửi dữ liệu tùy ý từ hoạt động này sang hoạt động khác bằng Ý định. Khi bạn phát một Ý định, các Hoạt động quan tâm (và các BroadcastRecievers khác) sẽ được thông báo về điều này. Một mục đích có thể chứa một Gói để bạn có thể gửi thêm dữ liệu cùng với Ý định.
Các gói là ánh xạ khóa-giá trị, vì vậy theo cách chúng giống như Hash, nhưng chúng không bị giới hạn nghiêm ngặt đối với ánh xạ đối tượng String / Foo. Lưu ý rằng chỉ một số loại dữ liệu nhất định được coi là "Parcelable" và chúng được phát âm rõ ràng trong API Bundle.
Chỉ cần tạo một gói,
Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);
IN "this_is_the_next_group. Class"
Bạn có thể lấy các mục như thế này.
Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
Gói: - Ánh xạ từ các giá trị Chuỗi sang các loại Parcelable khác nhau.
Gói thường được sử dụng để truyền dữ liệu giữa các hoạt động khác nhau của Android.
khi chúng ta gọi onPause () sau đó onStop () và sau đó theo thứ tự ngược lại onStop () thành onPause ().
Dữ liệu đã lưu mà hệ thống sử dụng để khôi phục trạng thái trước đó được gọi là "trạng thái thể hiện" và là tập hợp các cặp giá trị khóa được lưu trữ trong một đối tượng Bundle.
gói được sử dụng để chia sẻ dữ liệu giữa các hoạt động và để lưu trạng thái của ứng dụng theo phương thức oncreate () để ứng dụng sẽ biết nơi nó bị dừng ... Tôi hy vọng nó sẽ giúp :)
sử dụng gói gửi dữ liệu từ hoạt động này sang hoạt động khác với sự trợ giúp của đối tượng mục đích; Gói giữ dữ liệu có thể là bất kỳ loại.
Bây giờ tôi nói rằng làm thế nào để tạo bó truyền dữ liệu giữa hai hoạt động.
Bước 1: Vào hoạt động đầu tiên
Bundle b=new Bundle();
b.putString("mkv",anystring);
Intent in=new Intent(getApplicationContext(),secondActivity.class);
in.putExtras(b);
startActivity(in);
Bước 2: Vào hoạt động thứ hai
Intent in=getIntent();
Bundle b=in.getExtras();
String s=b.getString("mkv");
Tôi nghĩ rằng điều này hữu ích cho bạn ...........
Gói không chỉ để chuyển dữ liệu giữa hai thành phần khác nhau mà quan trọng hơn là nó được sử dụng để khôi phục các giá trị được lưu trữ trước khi hoạt động bị phá hủy thành hoạt động mới.
chẳng hạn như văn bản trong một EditText
widget hoặc vị trí cuộn của a ListView
.
Hoạt động đầu tiên:
String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());
Hoạt động thứ hai:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");