Fragment之间的通信
在本节中,你会学到
1、定义接口
2、实现接口
3、将消息传递给fragment
为了重用Fragment UI 组件,在设计中你应该通过定义每一个fragemnt自己的layout和行为,让fragment的自包含和模块化。一旦你定义了这些可重用的 Fragment,你可以通过Activity将它们关联起来并通过程序的逻辑代码将他们连接起来以实现整体组合的UI。
你会经常想要一个fragment与另一个fragment通信,例如基于用户事件改变fragment中的内容。所有fragment质检单额通信都是通过Activity关联起来的。两个fragment之间不应该直接进行通信。
定义接口
为了允许fragment和它的Activity通信,你应该fragment类中定义一个接口并在Activity中实现它。Fragment在 onAttach()回调函数中获取接口的具体实现的对象。后面,fragment就可以调用接口中的方法实现与Activity的通信。
下面是一个Fragment一Activity通信的例子:
// 用来存放fragment的Activtiy必须实现这个接口public interface OnHeadlineSelectedListener {public void onArticleSelected(int position);}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);// 这是为了保证Activity容器实现了用以回调的接口。如果没有,它会抛出一个异常。try {mCallback = (OnHeadlineSelectedListener) activity;} catch (ClassCastException e) {throw new ClassCastException(activity.toString()+ " must implement OnHeadlineSelectedListener");}}
现在fragment可以通过使用实现了OnHeadlineSelectedListener接口的mCallback实例
调用onArticleSelected()方法(或其他在接口中的方法)将消息传递给Activity。
例如下面在fragment中的方法将会在用户点击一个List item的时候被调用。这个fragment使用回调接口将时间传递给父Activtity。
@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {// 发送时间给Activity宿主 mCallback.onArticleSelected(position);}
实现接口
为了接收从fragment传递过来的事件回调,宿主Activity必须实现定义在fragment类中的接口。
例如,下面的activity实现了上个例子中的接口。
public static class MainActivity extends Activityimplements HeadlinesFragment.OnHeadlineSelectedListener{...public void onArticleSelected(int position) {// 用户选择了HeadlinesFragment中的头标题后// 做一些业务操作 } }
将消息传递给fragment
宿主Activity可以通过调用findFragmentById()方法获取Fragment实例,然后直接调用Fragment的公有方法,将消息传递给Fragment。
例如,想象一下,之前讲过的Activity可能包含有其他的fragment,而这些fragment通过上面的回调函数返回的接口动态地显示一些内容。这种情况下,Activity可以将回调函数中接收到信息传递给需要的fragment。
public static class MainActivity extends Activityimplements HeadlinesFragment.OnHeadlineSelectedListener{...public void onArticleSelected(int position) {// 用户选中HeadlinesFragment中的头标题后// 做一些必要的业务操作 ArticleFragment articleFrag = (ArticleFragment)getSupportFragmentManager().findFragmentById(R.id.article_fragment);if (articleFrag != null) {// 如果 article frag 不为空,那么我们在同时显示两个fragmnet的布局中...// 调用ArticleFragment中的方法去更新它的内容 articleFrag.updateArticleView(position);} else {// 否则,我们就是在仅包含一个fragment的布局中并需要交换fragment...// 创建fragment并给他一个跟选中的文章有关的参数ArticleFragment newFragment = new ArticleFragment();Bundle args = new Bundle();args.putInt(ArticleFragment.ARG_POSITION, position);newFragment.setArguments(args);FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();// 用这个fragment替换任何在fragment_container中的东西// 并添加事务到back stack中以便用户可以回退到之前的状态 transaction.replace(R.id.fragment_container, newFragment);transaction.addToBackStack(null);// 提交事务 transaction.commit();}} }
转载于:https://www.cnblogs.com/Free-Thinker/p/3657686.html
Fragment之间的通信相关推荐
- Fragment的生命周期同一Activity下不同Fragment之间的通信
Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信...
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3360938.html 如新浪微博下面的标签切换功能,我以前也写过一篇博文(http:/ ...
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[正文] 一.接口回调的简单引入: 我们先来看一个简单的接口回调的例子: 新建一个Java工程,然后新建一个包.然后新建一个A.java文件: A.java代码如下: 1 package com.cn ...
- Android Fragment(三)ListFragment简单介绍以及Fragment之间通信
一.Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fra ...
- fragment之间通信
fragment之间公共桥梁-->Activity. 转载于:https://www.cnblogs.com/nangongyibin/p/10257378.html
- Android学习之碎片与活动之间的通信
一.碎片虽然是嵌入在活动中显示的,但是碎片和活动都是各自存在不同的类当中的,并没有什么明显的方式来直接进行通信的.那么如果要在活动中调用碎片里的方法,在碎片里调用活动的方法,一个碎片调用另一碎片的方法 ...
- android fragment面试,Android fragment之间传递数据的方式?
方法一: 1.在MainFragment中设置一个setData()方法,在方法中设置更改按钮名称; //MainFragment.java文件中public void setData(String ...
- React(5)React兄弟组件之间的通信
文章目录 前言 一.兄弟组件之间的通信原理 二.三个组件的基本结构 1.子组件ColorSelector的基本结构 2.子组件ColorBoard的基本结构 3.父组件Color的基本结构 三.Col ...
- Fragment之间传递数据的方式
1.直接调用另一个Fragent对象的方法,两个Fragment之间高度耦合 2.采取接口回调的方式进行数据传递.即在一个fragment中创建一接口以及接口对应的set方法,在另一个fagment中 ...
最新文章
- 浅析C语言的一个关键字——register
- 双一流高校出新规:研究生未经导师同意发论文,不得用于毕业、评奖!
- [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)
- android中关于点击屏幕,实现破碎的效果的实现
- 年薪百万!这所高校一名本科生入选“天才少年”
- java 获取方法名
- Spring : @EnableConfigurationProperties注解
- 力扣112. 路径总和(JavaScript)
- 走吧---------------北岛
- 恭喜宿主获得鸿蒙,第四十章大殿讲道,十连抽获得鸿蒙至宝!
- Android EditText 常见问题总结
- Atitit.java图片图像处理attilax总结
- 93. 复原IP地址
- [2018.03.29 T2] 公交旅行
- Deepgreen DB 是什么(含Deepgreen和Greenplum下载地址)
- 【Pigeon源码阅读】高可用之熔断降级实现原理(十四)
- 你并没有那么去努力 所以你不能怪生活
- java绘图-绘制图片
- win10商店打不开_win10自带的照片查看器打不开的修复方法
- InetAddress类常用方法
热门文章
- 0基础学python-看完这篇,零基础也知道怎么学Python
- python零基础入门教材-Python零基础入门到精通自学视频教程
- python脚本实例手机端-用Python实现自动化操作Android手机
- python语言入门m-「数据挖掘入门系列」Python快速入门
- winpython使用教程-使用Python开发windows桌面程序【超简单】
- python网课一般多少钱-Python培训网课一般学费多少?毕业生能承担吗?
- python难学嘛-终于明白0基础学python难吗
- python读取csv文件的方法-python读取csv文件指定行的2种方法详解
- python基础语法合集-Python基础语法(四)—列表、元组、字典、集合、字符串
- python代码需要背吗-纠结应该先学Python还是Java?看完就有数了