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