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; } } |