activity和fragment fragment和fragment之間的通信

1. activity和fragment之間的通信

activity傳遞到fragemnt

1. 通過開啓事務 findFragmentById(R.id.content_fg);來拿到fragment實例,來調用參數爲接 口的方法,方法中通過參數實例調用接口方法

2. 通過設置fragment的argument

3. 通過getActivity()

fragment傳遞到activity

1. 通過Intent啓動activity 附加信息

2. fragment之間的通信

1. 通過獲取另一個fragment的實例並調用其方法(接口或者arguement)

(ContentFragmentgetActivity().getFragmentManager().findFragmentById(R.id.content_fg);

2. 接口回調

1. 創建一個接口,包含一個函數帶上你所需要傳遞數據類型的參數

2. 定義這個接口實例,並在事件中,比如點擊事件中 通過接口實例去調用接口方法

3. 創建一個靜態方法提供接口的註冊

4. 然後就可以調用函數註冊實現方法,如果點擊 調用了接口方法,那就會在這裏收到數據

3. 使用廣播

一邊發送 一邊接受

Intent intent = new Intent("showPro");

intent.putExtra("name", name);

LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity());

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction("showPro");

BroadcastReceiver br = new BroadcastReceiver() {

@Overridepublic

void onReceive(Context context, Intent intent) {

String key = intent.getStringExtra("name");

};

localBroadcastManager.registerReceiver(br,intentFilter);

 

EventBus介紹

1. EventBus是一個Android端優化的發佈和訂閱事件消息總線,解決組件之間,組件與後臺線程之間的通信,可以代替Intent Handler Broadcast 等在Fragment和activity之間傳遞消息。

1. 添加依賴'de.greenrobot:eventbus:3.0.0-beta1'

2. 基礎用法瞭解

EventBus.getDefault().register(this);

EventBus.getDefault().unregister(this);

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

new Thread(new Runnable() {

@Override

public void run() {

while (time < 100) {

time += 15;

EventBus.getDefault().post(new TestEvent(time));

try {

Thread.sleep(200);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}).start();

}

});

EventBus.getDefault().register(this);

}

 

@Subscribe(threadMode = ThreadMode.MAIN)

public void onEventMainThread(TestEvent event) {

progressbar.setProgress(event.getMsg());

}

 

public class TestEvent {

private int mMsg;

 

public TestEvent(int msg) {

mMsg = msg;

}

 

public int getMsg() {

return mMsg;

}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章