Android Fragment 与 Activity 的交互
Android Fragment 与 Activity 的交互场景主要有两种: 组件获取 和 数据传递
-
组件获取
Fragment
获得Activity
中的组件getActivity().findViewById(R.id.list);
Activity
获得Fragment
中的组件(根据 id 或 tag 都可以)getFragmentManager.findFragmentByid(R.id.fragment1);
-
数据传递
-
Activity
传递数据给Fragment
在
Activity
中创建Bundle
数据包,调用Fragment
实例的setArguments(bundle)
从而将Bundle
数据包传给Fragment
,然后Fragment
中调用getArguments()
获得Bundle
对象,最后进行解析就可以了 -
Fragment
传递数据给Activity
在
Fragment
中定义一个内部回调接口,再让包含该Fragment
的Activity
实现该回调接口,Fragment
就可以通过回调接口传数据了 -
Fragment 与 Fragment 之间的数据互传
找到要接受数据的
Fragment
对象,直接调用setArguments()
传数据进去就可以了一般情况下时
replace
时,即fragment
跳转的时候传数据的,那么只需要在初始化要跳转的Fragment
后调用 `setArguments() 方法传入数据即可如果是两个
Fragment
需要即时传数据,而非跳转的话,就需要以Activity为媒介,先在Activity
获得f1
传过来的数据,再传到f2了,就是~FragmentManager fManager = getSupportFragmentManager( ); FragmentTransaction fTransaction = fManager.beginTransaction(); Fragmentthree t1 = new Fragmentthree(); Fragmenttwo t2 = new Fragmenttwo(); Bundle bundle = new Bundle(); bundle.putString("key",id); t2.setArguments(bundle); fTransaction.add(R.id.fragmentRoot, t2, "~~~"); fTransaction.addToBackStack(t1); fTransaction.commit();
-
Fragment 传递数据给 Activity
-
在
Fragment
中定义一个回调接口public interface CallBack{ /*定义一个获取信息的方法*/ public void getResult(String result); }
-
在
Fragment
中实现接口回调/*接口回调*/ public void getData(CallBack callBack){ /*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/ String msg = editText.getText().toString(); callBack.getResult(msg); }
-
在
Activity
中使用接口回调方法读数据/* 使用接口回调的方法获取数据 */ leftFragment.getData(new CallBack() { @Override public void getResult(String result) { /*打印信息*/ Toast.makeText(MainActivity.this, "-->>" + result, 1).show(); } });