Android 中Fragment与Activity通信大汇总
2016-03-31 23:02
381 查看
最近把跟小伙伴项目的一部分做完了,终于没借口偷懒了,今天就把Fragment与Activity之间通信做一个大汇总。
1、Activity与Fragment通信。
Activity向Fragemnt中传入数据时,通常将数据封装到一个Bundle对象中,通过
①封装bundle对象
②在Fragement中获取bundle
2、Fragment与宿主Activity通信
我们在Fragment中的onAttach声明一个接口,在宿主Activity中实现这个接口,当在Fragment中发生事件比如按钮点击事件,我们调用回调接口,宿主Activity就可以接收到该消息
①在Fragment中声明接口
②在Fragment事件中加入接口回调
③在宿主Activity中声明该接口,并对回调做出相对的呼应
这样在Fragment中按下按钮,宿主Activity会显示一个Toast
3、Fragment获取宿主Activity的数据
如果我们Fragment想要获取宿主Activity的信息,只能获取到宿主Activity中public的对象和方法。
例如Activity中有两个对象
还有两个方法
在Fragment中我们可以通过
4、Fragment与Fragment之间通信
这种情况一般我们都选择宿主Activity作为中介,声明两个public方法
getxxx() setxxx()Fragement通过调用Activity中的这两个方法来互相通信。
Acitivity定义
Fragment1定义
Fragment2定义
1、Activity与Fragment通信。
Activity向Fragemnt中传入数据时,通常将数据封装到一个Bundle对象中,通过
setArguments()方法将对象传入启动的Fragment,在Fragment中,我们可以通过
getAragument()方法获得bundle,解析出数据。
①封装bundle对象
Fragment1 = new Fragment1(); Bundle args = new Bundle(); args.putInt("id", 1); Fragment1.setArguments(args);
②在Fragement中获取bundle
Bundle bundle = getArguments(); int id = bundle.getInt("id");
2、Fragment与宿主Activity通信
我们在Fragment中的onAttach声明一个接口,在宿主Activity中实现这个接口,当在Fragment中发生事件比如按钮点击事件,我们调用回调接口,宿主Activity就可以接收到该消息
①在Fragment中声明接口
public onCallBackListener onCallBackListener; public interface onCallBackListener{ public void onCallBack(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); onCallBackListener = (onCallBackListener)activity; }
②在Fragment事件中加入接口回调
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onCallBackListener.onCallBack(); } });
③在宿主Activity中声明该接口,并对回调做出相对的呼应
public class MainActivity extends FragmentActivity implements Fragment1.onCallBackListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ********省略********* } @Override public void onCallBack() { Toast.makeText(this,"按下按钮",Toast.LENGTH_SHORT).show(); } }
这样在Fragment中按下按钮,宿主Activity会显示一个Toast
3、Fragment获取宿主Activity的数据
如果我们Fragment想要获取宿主Activity的信息,只能获取到宿主Activity中public的对象和方法。
例如Activity中有两个对象
private int id = 1; public int id1= 2;
还有两个方法
private int getId(){ } public int getId1(){ }
在Fragment中我们可以通过
((MainActivity)getActivity())方法来获取到宿主的活动实例,但是之后只能通过
((MainActivity)getActivity()).id1得到id1对象。但是可以通过
getId1()方法,间接获取到id的数值。
4、Fragment与Fragment之间通信
这种情况一般我们都选择宿主Activity作为中介,声明两个public方法
getxxx() setxxx()Fragement通过调用Activity中的这两个方法来互相通信。
Acitivity定义
public class Act extends Activity{ private Fragment f1=null; private Fragment f2=null; public interface MyCallBack{//定义回调接口 void callBack(String param);//回调方法 } public void onCreate(Bundle bd){ super.onCreate(bd); f1 = (Fragment)findViewById(R.id.xxxx1);//获取fragment1 f2 = (Fragment)findViewById(R.id.xxxx2);//获取fragment2 f1.setCallBack(new MyCallBack(){//往fragment1中设置回调接口,便于传递参数到activity中 public void callBack(String param){ f2.showParam(param);//回调接口中,把参数传递到fragment2中 } }); } }
Fragment1定义
public class MyFrag1 extends Fragment { MyCallBack cb=null; public void setCallBack(MyCallBack cb){//设置回调接口 this.cb = cb; } public void postParam(){ this.cb.callBack("2222");//调用回调接口 } }
Fragment2定义
public class MyFrag2 extends Fragment { public void showParam(String params){//显示输入的值 ...显示params } }
相关文章推荐
- Android调试,The selected device is incompatible
- android开发之Service的使用
- Android的基本世界观——系统简介,组件逻辑及其他
- Android 多线程文件断点下载器实现(造轮子系列)(一)
- android中的线程池学习笔记
- 绘图机制ColorMatrix
- Android的基本世界观——系统简介,组件逻辑及其他
- Android Studio Jni环境配置 - 记录
- Android基础-ViewFlipper
- Gradle DSL method not found: 'android()
- Android Studio提交代码到SVN
- Android坐标系
- [android] 代码注册广播接收者&利用广播调用服务的方法
- Intent 全面理解
- Android学习之设计模式之单例模式
- Android 的 SDK Manager 无法启动 闪退解决方法
- 解决Attribute "rippleColor" has already been defined的问题
- android 文字描边
- Android知识总结:ListView 出现IndexOutOfBoundsException异常
- 聊聊Android 热修复Nuwa有哪些坑