Cách dùng Eventbus để truyền dữ liệu trong Android

5/5 - (3 votes)

Dùng thư viện này khá là đơn giản, cám ơn tác giả đã tạo ra một thư viện tuyệt vời như thế này. Bạn có thể theo dõi cách làm bên dưới.

Thêm thư viện

implementation 'org.greenrobot:eventbus:3.1.1'

Thêm vào trong file gradle của Module: app/build.gradle

Tạo ra 1 class trong Java để lưu dữ liệu khi gửi

Thực chất bước này là định nghĩa một Event

public class ScanBleEvent {

    private String mStr;
    private boolean isScan;

    public ScanBleEvent(String mStr, boolean isScan) {
        this.mStr = mStr;
        this.isScan = isScan;
    }

    public String getmStr() {
        return mStr;
    }

    public void setmStr(String mStr) {
        this.mStr = mStr;
    }

    public boolean isScan() {
        return isScan;
    }

    public void setScan(boolean scan) {
        isScan = scan;
    }
}

Đăng kí và huỷ đăng kí cho class bên trên

Chúng ta sẽ đăng ký tại nơi muốn nhận dữ liệu như Activity, Fragment.

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

@Override
public void onStop() {
    Log.i(TAG, "onStop menu fragment");
    EventBus.getDefault().unregister(this);
    super.onStop();
}

Xử lý sự kiện

Khi đã lắng nghe thì cần có chỗ để xử lý kết quả phải không? Chúng ta sẽ xử lý sự kiện như bên dưới. Tên sự kiện có thể tuỳ ý thay đổi. Chúng ta sẽ xử lí tại nơi nhận dữ liệu như Activity, Fragment cùng nơi với chỗ đã lắng nghe.

@Subscribe(threadMode = ThreadMode.MAIN)
public void onScanBleEvent(ScanBleEvent event) {
    LogI("getmStr: " + event.getmStr());
    LogI("isScan: " + event.isScan());
}

Bắn sự kiện

Bước cuối chúng ta sẽ bắn dữ liệu đi, những nơi đã đăng ký sẽ nhận được sự kiện này.

EventBus.getDefault().post(new ScanBleEvent("ok",true));

Dùng EventBus ta có thể:

  • Truyền dữ liệu từ Activity đến Activity (thông thường dùng Intent).
  • Truyền dữ liệu từ Activity đến Fragment (thông thường dùng Interface, Bundle, tạo đối tượng fragment).
  • Truyền dữ liệu từ Service đến Activity (thông thường dùng broadcast).
  • Truyền dữ liệu từ Fragment đến Fragment (thông thường dùng Interface hoặc Bundle).
  • Truyền dữ liệu từ Fragment đến Activity (thông thường dùng Interface hoặc Bundle).
  • Truyền dữ liệu từ Thread đến Activity (Handler, AsyncTask).

Bạn có thể đọc thêm ở đây:

https://github.com/greenrobot/EventBus

https://gunhansancar.com/ease-communication-between-activities-fragments-services/

Các bài viết không xem thì tiếc:

1 Comment

Thảo luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Xem thêm
Thiết kế web ở đâu thì hợp lý?Hiện nay có…
 
 
 
 
Facetime iPhone

Main Menu