[Android] Bài 28: Passing data between activities truyển gửi data giữa các activity

Thảo luận trong 'Android' bắt đầu bởi hieu, 2/4/18.

  1. hieu

    hieu Administrator Thành viên BQT

    Tham gia ngày:
    20/3/18
    Bài viết:
    40
    Đã được thích:
    29
    Điểm thành tích:
    18
    Một trong các vấn dể trong lập trình android đó là làm sao truyền các dữ liệu qua các activity mà các activity đó sẽ liên lạc với nhau truyền dữ liệu ra sao.
    Có các hình thức để truyền dữ liệu qua các activity như sau:
    • Shared Preferences
    • Database
    • Static class
    • Intents
    Tuy nhiên có các vấn đề như muốn nguồn dữ liệu đó chuyển qua lại đó được liên tuc ... cái này nối sau đi.. giờ vô cái dễ nhất đi static class:
    Static class:

    - biết nói sao... đại khái tạo ra 1 cái class tĩnh khai báo các static method(đại khái vại chứ chả biết nghĩa tiếng việt là gì). khai báo 1 lần thôi rồi từ đó mình sẽ sử dụng nó đi lòng vòng trên tất cả các app.
    cách khai báo static

    PHP:
    public class Config {
        public static 
    String user "";
        public static 
    String phone "";
    }
    Passing data: Intents
    Intent là chuyển chuyển activity này sang activity khác. Thì intent hỗ trợ support bạn 3 con đường để chuyển dữ liệu qua các activity.


      • Direct: Gửi dữ liệu ngay sau khi intent chuyển activity kết thúc
      • Bundle: tạo ra 1 bundle mà gửi hết data vào trong đó bundle giúp bạn đem data đi bất cứ đâu. khi kết thúc đa nhiệm bundle cũng kết thúc công việc của mình và ko lưu lại giống như database client như Share Preferences,SQLite
      • Parcelable: Là công việc quét hết dữ liệu của 1 Object chuyển đi
    **Passing data: Direct
    Intent tên gọi các method như putExtra(String name," Nội dung")
    ví dụ bạn đặt tên cái putExtra đó là catra thì putExtra("catra","Cá Phát Tra"). Tuy nhiên việc truyền tải dữ liệu này có phần hạn chế chỉ sử dụng nội dung nhỏ nhẹ kiểu dư liệu như Int Long String, hay char...
    PHP:
    Intent i = new Intent(EditActivity.thisViewActivity.class);
    i.putExtra("name"edtName.getText().toString();
    i.putExtra("surname"edtSurname.getText().toString();
    i.putExtra("email"edtEmail.getText().toString();
    startActivity(i);

    Ở đầu activity kia ví dụ GetDataActivity sẽ có những key là name,surname,email bạn đã nhận data từ 3 key đó và bây giờ mình nhận data từ key đó
    PHP:
    protected void onCreate(Bundle savedInstanceState) {
    Intent i getIntent();
    String name i.getStringExtra("name"));
    String surname i.getStringExtra("surname"));
    String email i.getStringExtra("email"));
    }
    **Passing Data: sử dụng Bundle
    sử dụng bundle một nơi lưu trữ dữ liệu có thể là kiểu string, integer,chars boolean hoặc 1 đối tượng nào đó. thay vì bạn truyền trực tiếp qua direct thì bạn truyền vào 1 nơi chứa luồng dữ liệu gọi là bundle, bundle được sử dụng rất nhiều như truyền dữ liệu qua fragment,

    PHP:
     Intent i = new Intent(EditActivity.thisViewActivity.class);[/I]
    [
    I]Bundle b = new Bundle();
    b.putString("name"edtName.getText().toString());
    b.putString("surname"edtSurname.getText().toString());
    b.putString("email"edtEmail.getText().toString());
    i.putExtra("personBdl"b);
    startActivity(i);

    Bên activity khác cũng nhận 1 cách tương tự
    PHP:
    Intent i getIntent();
    Bundle b i.getBundleExtra("personBdl");[/I]
    [
    I]String name b.getString("name");
    String surname b.getString("surname");
    String email b.getString("email");

    Passing data: Parcelable
    sẽ có 1 bài riêng cho Parcelable và Serializable thì truyền object hay array Object qua lại các activity luôn là vấn đề nan giải
     
    Chỉnh sửa cuối: 6/4/18

Chia sẻ trang này

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.