Ví dụ truyền dữ liệu giữa hai fragment bằng Eventbus.

Chào các bạn,

Truyền dữ liệu giữa các thành phần của android như Activity, Fragment, Thread hay Services là một việc không thể thiếu khi lập trình ứng dụng android. Thông thường chúng ta hay truyền thông qua Intent, nhưng hôm nay tôi sẽ xây dựng một ứng dụng đơn giản sử dũng EventBus.

Ưu điểm của EventBus là tốc độ truyền nhanh hơn và cách viết đơn giản hơn khi sủ dụng Intent.

Cách hoạt động của eventbus

Đầu tiên chúng ta bắt đầu với việc cài đặt.

Nếu bạn sử dụng Android Studio, thêm dependency vào file build.gradle(module:app):

dependencies {

compile 'de.greenrobot:eventbus:2.4.0'
}

Còn với Eclipse bạn tải file .far tại đây rồi thêm vào thư viện của project.

Bài toán: Fragment A cho người dùng nhập tên và tuổi rồi gửi qua Fragment B. Fragment B nhận và hiển thị tên và tuổi.

Tạo một Class “NameandAge”- đây sẽ là kiểu dữ liệu chúng ta truyền giữa hai fragment:

 public class NameandAge {
  private String name;
 private int age;
 public NameandAge(String name, int age) {
 this.name = name;
 this.age = age;
 }

public String getName() {
 return name;
 }

public int getAge() {
 return age;
 }
 }

Ở Fragment A chúng ta vừa nhận được dữ liệu người dùng nhập vào. khi người dùng ấn nút gửi chúng ta bắt đầu gửi dữ liệu qua cho bên Fragment B:


public class FragmentA extends Fragment {
private EditText editName, editAge;
private Button btnSend;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View v = inflater.inflate(R.layout.fragment_a, container, false);
editName = (EditText) v.findViewById(R.id.edit_name);
editAge = (EditText) v.findViewById(R.id.edit_age);
btnSend = (Button) v.findViewById(R.id.btn_send);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sendDatatoFragmentB();
}
});
return v;
}

private void sendDatatoFragmentB() {

NameandAge data = new NameandAge(editName.getText().toString(), Integer.parseInt(editAge.getText().toString()));
EventBus.getDefault().postSticky(data);
//Start Activity B;
Intent i = new Intent(getActivity(), ActivityB.class);
startActivity(i);
}

Trong fragmentA chúng ta tạo một đối tượng data chứa dữ liệu muốn gửi cho fragmentB. Sau đó chúng ta đưa dữ liệu data vào trong bus để gửi đi. phương thức postSticky() sẽ lưu lại dữ liệu cho tới khi fragment tới lấy.

Ở Fragment B, để  nhận được dữ liệu chúng ta phải đăng ký bus nhận đữ liệu:

public class FragmentB extends Fragment {
private TextView txtName, txtAge;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_b, container, false);
txtAge = (TextView) v.findViewById(R.id.txtage);
txtName = (TextView) v.findViewById(R.id.txtname);
return v;
}

@Override
public void onStart() {
super.onStart();
EventBus.getDefault().registerSticky(this);
}

@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}

public void onEventMainThread(NameandAge event) {

txtAge.setText("Tên: " + event.getAge());
txtName.setText("Tuổi: " + event.getName());
}
}

Để nhận dữ liệu fragmentA gửi cho, fragmentB cần phải đăng ký vào bus. phương thức onEventMainThread() là nơi mà fragmentB nhận dữ liệu từ fragment. Ở đây chúng ta làm việc với giao diện UI nên dùng onEventMainThread(), ngoài ra còn có các phương thức nhận khác như onEvent(), onEventBackgroundThread(), …

Đây là một ví dụ đơn giản về cách sử dụng EventBus để trao đổi dữ liệu giữa các fragment.

Các bạn có thể lấy source của ví dụ trên tại đây.

Advertisements
Ví dụ truyền dữ liệu giữa hai fragment bằng Eventbus.

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

w

Connecting to %s