Fragment与Acitvity通信
Fragment与Activity通信的方式如下:
一、通过初始化函数提供
1.在动态添加Fragment的过程中,我们在Activity中通过Fragment.setArguments()的方法为Fragment提供数据;
2.在Fragment中,在onAttach()函数中通过调用getArguments()获得一个Bundle对象,从而获取我们提供的数据。
二、创建回调接口
比如说:新闻浏览情境下,共有两个Fragment,一个是用来显示新闻标题;另外一个用来显示新闻内容。当我们点击新闻标题的时候,新闻的内容就显示到另外一个Fragment当中了。下面我们就来通过按下Fragment1中的button来传递一个消息到Fragment2中。
首先我们要做的是,在Fragment1中创建一个回调接口,并且在Activity中重写他的方法,传递信息给Fragment2(举一反三:我们也可以传递给其他的Fragment)。
1.创建回调接口;
public interface OnButtonClickListener {
public void onButtonClicked();
}
2.为了确保宿主activity实现这个接口,fragment1的onAttach() 方法中通过将传入的activity强制类型转换,实例化一个OnButtonClickListener对象;
@Override
public void onAttach(Activity activity) {
Log.v(TAG, "Fragment1 onAttach");
Bundle args = getArguments();
if (null != args) {
// 在这里我们可以将从Acivity收到的数据保存起来,并且显示到Fragment当中。 try {
mListener = (OnButtonClickListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnButtonClickListener");
}
super.onAttach(activity);
}
3.注册Button的Click事件,并在事件中调用回调方法。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
Log.v(TAG, "Fragment1 onCreateView");
View view = inflater.inflate(R.layout.fragment1, container, false);
// 为button注册事件,并且调用回调接口,将信息返回给上层
view.findViewById(R.id.fragment1_btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onButtonClicked();
}
});
return view;
}
然后,Activity的代码要实现:
1.通过implements实现回调接口;
public class MainActivity extends FragmentActivity implements OnButtonClickListener{
2.重写回调方法,然后向Fragment2传递数据。
@Override
public void onButtonClicked() {
Log.i(TAG, "onButtonClicked");
TextView tv = (TextView) fragment2.getActivity().findViewById(R.id.fragment2_tv);
tv.setText(tv.getText() + "\n从Fragment1收到数据!");
}
三、源码下载
参考链接:http://www.cnblogs.com/getherBlog/p/3949171.html
代码下载链接:http://www.apkbus.com/android-179360-1-1.html
Fragment与Acitvity通信的更多相关文章
- 【Android开发】之Fragment与Acitvity通信
上一篇我们讲到与Fragment有关的常用函数,既然Fragment被称为是“小Activity”,现在我们来讲一下Fragment如何与Acitivity通信.如果上一篇还有不懂得,可以再看一下.传 ...
- Fragment间的通信
在网上看到的一篇文章,总结的很好 为了重用Fragment的UI组件,创建的每个Fragment都应该是自包含的.有它自己的布局和行为的模块化组件.一旦你定义了这些可重用的Fragment,你就可以把 ...
- Fragment之间的通信(四)
自定义两个fragment的布局和java类. 在mainactivity中引用布局文件 在其中的一个fragment中的控件上添加监听,获取到另一个fragment中控件的内容,展示出来完成frag ...
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3360938.html 如新浪微博下面的标签切换功能,我以前也写过一篇博文(http:/ ...
- Fragment之间的通信
在本节中,你会学到 1.定义接口 2.实现接口 3.将消息传递给fragment 为了重用Fragment UI 组件,在设计中你应该通过定义每一个fragemnt自己的layout和行为,让frag ...
- 利用Fragment创建动态UI 之 Fragment之间的通信
为了可以复用一个fragment,所以在定义fragment的时候,要把它定义为一个完全独立和模块化,它有它自己的layout和行为.当你定义好了这些可复用的fragment,可以把他们和activi ...
- 关于Fragment与Fragment、Activity通信的四种方式
一直想总结一下Fragment与Fragment.Activity通信的问题,今天有时间一共总结了三种,权当抛砖引玉,如果大家还有更好的方式来实现Fragment和Fragment.Activity的 ...
- Fragment的生命周期&同一Activity下不同Fragment之间的通信
Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...
随机推荐
- dependencies和devDependencies两者区别
在npm生成的package.json文件中,有devDependencies和dependencies两个环境 devDependencies 用于开发环境(本地) dependencies 用于生 ...
- 068、Calico的网络结构是什么?(2019-04-11 周四)
参考https://www.cnblogs.com/CloudMan6/p/7520164.html root@host1:~# docker run -itd --name bbox1 -- ...
- jsp实现验证码登陆
login.jsp: <%@ page language="java" import="java.util.*,com.cn.servlet.*" pag ...
- gcc 编译 汇编 链接
要想研究使用 gcc, gcc-multilib 这个包是一定要安装的, 它允许通过 -m32 和 -m64 选项来选择生成 32 位或者 64 的 ELF 文件. 我们知道程序的默认起点是 _sta ...
- Java集合操作精华总结
一.Set1.HashSet boolean add(E e) 添加 访问 boolean remove(E e) 删除 Iterator<E> iterator 遍历 int size( ...
- C#中转换函数Convert、Parse、TryParse、(int) 的区别
Convert.Parse.TryParse.(int) 三个函数都是将值转换成整数,但是四者之间各有异同,开发人员可以根据情况选用最合适的.以下解释均经过高人验证,希望对大家有所帮助. 1 (int ...
- C# Math.Round实现中国式四舍五入
decimal sum = 11111.334; sum = , MidpointRounding.AwayFromZero); sum:11111.33decimal sum = 11111.34 ...
- Nginx不支持Post数据中带有"."
如果提交的数据中带有.,nginx会把数据过滤掉,会导致后台收不到数据.下面是一个错误示例及解决办法
- 【bzoj 2049】Cave 洞穴勘测
Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...
- Jupyter NoteBook使用快捷键
命令模式 (按键 Esc 开启) Enter : 转入编辑模式 Shift-Enter : 运行本单元,选中下个单元 Ctrl-Enter : 运行本单元 Alt-Enter : 运行本单元,在其下插 ...