Android Fragment与Activity之间的相互通信实例代码
android fragment与activity之间的相互通信
前言
自从android3.0引入fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适配问题。fragmenty不能单独存在,必须依赖activity作为视图展示的一部分,同事它具有自己的生命周期,接收它自己的事件,具有更加灵活的特性,如今fragment已经被广泛的应用到app开发中,最常见的就是单activity多fragment的模式。fragment依赖于activity而存在,就不可避免需要与activity进行交互,在这里就简单的介绍三种常用的交互方式。
一、接口方式
在fragment类中定义一个接口并在activity中实现它。fragment在onattach()回调函数中获取接口的具体实现的对象。后面,fragment就可以调用接口中的方法实现与activity的通信。
在android5.0之后废除了onattach(activity activity)的方法,转而使用onattach(context context),也就是传递的参数发生变化
public interface showmsglistener{ void showmsg(string str); } private showmsglistener msglistener; @override public void onattach(activity activity) { super.onattach(activity); try { if(activity!=null){ msglistener=(mainactivity)activity; } } catch (classcastexception e) { throw new classcastexception(activity.tostring() + " must implement showmsglistener"); } } mbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { msglistener.showmsg("hello android!(接口)"); } });
在activity中需要实现该接口
@override public void showmsg(string str) { toast.maketext(mainactivity.this, str, toast.length_short).show(); }
二、广播
在activity中注册广播接收器,在fragment中发送广播
private broadcastreceiver mbroadcastreceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { string action = intent.getaction(); if (action.equals(action_name)) { string msg = intent.getstringextra("msg"); toast.maketext(mainactivity.this, msg, toast.length_short).show(); } } }; public void registerboradcastreceiver() { intentfilter myintentfilter = new intentfilter(); myintentfilter.addaction(action_name); registerreceiver(mbroadcastreceiver, myintentfilter); } @override protected void ondestroy() { super.ondestroy(); unregisterreceiver(mbroadcastreceiver); }
三、fragment 从activity获取数据
在fragment 的getinstance()方法中setarguments()设置参数
public static fragment getinstance(string msg){ bundle bundle = new bundle(); bundle.putstring("msg",msg); mainfragment fragment=new mainfragment(); fragment.setarguments(bundle); return fragment; }
再通过getarguments()方法获取
public void initdatas() { bundle bundle=getarguments(); if(bundle!=null){ string msg=bundle.getstring("msg"); toast.maketext(getactivity(), msg, toast.length_short).show(); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: 给超级链接增加其他样式
下一篇: DataTable多列合并问题轻松搞定
推荐阅读
-
Android Fragment与Activity之间的相互通信实例代码
-
Android中fragment与activity之间的交互(两种实现方式)
-
Android中fragment与activity之间的交互(两种实现方式)
-
Android Activity与Fragment之间的跳转实例详解
-
Android中Service与Activity之间通信的几种方式
-
详解Android activity与fragment之间的通信交互
-
Android Activity与Fragment之间的跳转实例详解
-
Android中Service与Activity之间通信的几种方式
-
详解Android activity与fragment之间的通信交互
-
Android 手动撸出一个事件总线框架 二 Activity上主线程与子线程之间的通信