Android - Fragment (三)不同Fragment之间的通信
在Fragment的java文件中,可以使用getActivity()来获得调用它的activity,
然后再找到另一个Fragment,进行通信
getActivity().getFragmentManager().findFragmentById(R.id.fragment_list);
但这样做耦合度太高,不方便后续的修改操作
Fragment与其附着的Activity之间的通信,都应该由Activity来完成
不能是多个Fragment之间直接通信
Fragment与其附着的Activity之间通信最佳方式:
1. 在发起事件的Fragment中定义一个接口,接口中声明你的方法
2. 在onAttach方法中要求Activity实现该接口
3. 在Activity中实现该方法
例如一个activity中布置了2个Fragment,它们之间的通信要依靠activity来完成
代码: ListStoreActivity.java NewItemFragment.java ListStoreFragment.java
布局文件为: liststore.xml new_item_fragment.xml
准备布局文件:
liststore.xml 用LinearLayout中放置了2个fragment,分别指向2个Fragment文件
<fragment android:id="@+id/fragment_new" android:name="com.rust.liststore.NewItemFragment" android:layout_width="match_parent" android:layout_height="wrap_content" /> <fragment android:id="@+id/fragment_listview" android:name="com.rust.liststore.ListStoreFragment" android:layout_width="match_parent" android:layout_height="wrap_content" />
new_item_fragment.xml 中并排放置一个EditText和一个按钮
<EditText android:id="@+id/edittx_new" android:layout_width="0dp" android:layout_weight="4" android:layout_height="wrap_content" android:hint="@string/hint_new" /> <Button android:id="@+id/btn_add_new_item" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="@string/hint_add_new_item" />
ListStoreFragment.java
public class ListStoreFragment extends ListFragment{ /// 继承自ListFragment,已经封装好了listview /// 不需要自己写ListView了 }
NewItemFragment.java 主要代码如下
/** * 声明一个接口,定义向activity传递的方法 * 绑定的activity必须实现这个方法 */ public interface OnNewItemAddedListener { public void newItemAdded(String content); } private OnNewItemAddedListener onNewItemAddedListener; private Button btnAddItem; /*复写onAttach方法*/ @Override public void onAttach(Activity activity) { super.onAttach(activity); try { onNewItemAddedListener = (OnNewItemAddedListener) activity; } catch (ClassCastException e){ throw new ClassCastException(activity.toString() + "must implement OnNewItemAddedListener"); } }
ListStoreActivity.java
加载主视图setContentView(R.layout.liststore);
两个Fragment通过 ListStoreActivity.java 来通信
在onCreate方法中获取ListStoreFragment的实例;并且复写newItemAdded方法,在里面加上业务逻辑
public class ListStoreActivity extends Activity implements OnNewItemAddedListener{ private ArrayList<String> data; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.liststore); data = new ArrayList<String>(); // 把data装入adapter中 adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); // ListFragment并不需要再定义一个listview ListStoreFragment listStoreFragment = (ListStoreFragment) getFragmentManager().findFragmentById(R.id.fragment_listview); listStoreFragment.setListAdapter(adapter); } @Override public void newItemAdded(String content) { // 复写接口中的方法,业务代码在这里实现 if(!content.equals("")) { data.add(content); adapter.notifyDataSetChanged(); } } }
至此,通信搭建完成
Android - Fragment (三)不同Fragment之间的通信的更多相关文章
- Android中BroadCast与Activity之间的通信
在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...
- Android中两个Activity之间简单通信
在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...
- Java学习笔记46(多线程三:线程之间的通信)
多个线程在处理同一个资源,但是线程的任务却不相同,通过一定的手段使各个线程能有效地利用资源, 这种手段即:等待唤醒机制,又称作线程之间的通信 涉及到的方法:wait(),notify() 示例: 两个 ...
- Android中Service和Activity之间的通信
启动Service并传递数据进去: Android中通过Intent来启动服务会传递一个Intent过去. 可以在Intent中通过putExtra()携带数据 Intent startIntent ...
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android中使用开源框架EventBus3.0实现Fragment之间的通信交互
1.概述 在之前的博文中简单介绍过如何实现fragment之间的信息交互:<Android中Fragment与Activity之间的交互(两种实现方式)>,今天继续给大家介绍一种可以实现此 ...
- [转][译][Android基础]Android Fragment之间的通信
2014-2-14 本篇文章翻译自Android官方的培训教程,我也是初学者,觉得官方的Training才是最好的学习材料,所以边学边翻译,有翻译不好的地方,请大家指正. 如果我们在开发过程中为了重用 ...
- 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:/ ...
随机推荐
- Ubuntu安装genymotion模拟器步骤
1.安装VitrualBox genymotion模拟器需要有VirtualBox环境,打开终端(ctrl + alt + T),执行以下命令: sudo apt-get install virtua ...
- 安卓餐厅点餐系统---针对浩然android工作室的一个小白的分析
昨天刚把浩然android工作室的下载下来了,为了研究下点餐系统的架构,更好的完成手中的项目,便写出一个分析报告(小白的分析,忘见谅!) 本项目app主要用于餐厅无线订餐使用,功能突出餐厅的订餐需求, ...
- Dojo初探之5:dojo的request(请求)操作、请求过程事件绑定和隐藏数据data()操作(基于dojo1.11.2版本)
前言: 上一章详细阐述了dojo的事件绑定操作,本章将讲解dojo的请求操作 注:dojo的请求操作与js和jquery完全不同! 1.dojo的请求 dojo通过request.get()/.put ...
- 渗透测试工具Nmap从初级到高级
Nmap是一款网络扫描和主机检测的非常有用的工具. Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它可以适用于winodws,linux,mac等操作系统.Nmap ...
- idea live template
最近正在研究如何给idea添加注释模板. 此篇文章是记录在写(开发)注释模板的过程中遇到的坑. 1. methodParameters() 当函数的参数列表为空的时候返回的是: [] 当函数的参数列表 ...
- JS问题笔记——模拟Jq底层实现工厂模式
<script type="text/javascript"> (function (window,undefined){ function _$(arguments) ...
- 基于C#的接口自动化测试(二)
Json多重数据处理方法II:jobj直接向后调用即可 ]["GoodsName"]; 用:分隔的字符串转字典: public static Dictionary<strin ...
- Java 9 揭秘(5. 实现服务)
Tips做一个终身学习的人. Implementing Services 在这章中,主要介绍如下内容: 什么服务,服务接口,服务提供者: 在 JDK 9之前和在JDK 9中如何实现服务 如何使用Jav ...
- 从一道例题谈Arrays.toString()与其他String的转换方法
阅读该篇文章前,请大家事先阅读一下: java.toString(),(String),String.valueOf的区别 有了上述基础后,我接下来谈谈从一道题目中获得的些许收获. 今天在做题是发 ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...