我们经常遇到fragment与activity之间通信的问题,一般也就那么几种方式,
1.fragment中使用getActivity()调用Activity中的public方法
2.activity使用getSupportFragmentManager()来管理fragment
3.activity使用bundle向fragment传递数据
3.activity实现fragment中定义接口接收数据(回调机制)
下面就来介绍一下bundle和接口的实现方式:
bundle方式传递数据
首先,在activity中往bundle里加数据
然后调用setArguments(bundle);
Bundle bundle = new Bundle();
bundle.putString("data", "数据来自mainActivity");
fragmentA.setArguments(bundle);
fragmentManager.beginTransaction().replace(R.id.layout_root, fragmentA, null).commit();
在fragment中接收数据
/**接收来自Activity的数据**/
Bundle bundle = getArguments();
textView.setText(bundle.getString("data"));
接口方式传递数据
- 在fragment中定义接口
public interface OnReceiverDataListener {
void loadData(String str);
}
- 因为接口要由activity来实现,所以要把activity传递给这个接口引用,这样,就可以和Activity进行交互了
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
onReceiverDataListener = (OnReceiverDataListener) activity;
}
- activity实现接口便完成了数据的传递
@Override
public void loadData(String str) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
}