方法一:

1、在MainFragment中设置一个setData()方法,在方法中设置更改按钮名称;

//MainFragment.java文件中public void setData(String string) {

bt_main.setText(string);

}

2、在MenuFragment中的ListView条目点击事件中通过标签获取到MainFragment,并调用对应的setData()方法,将数据设置进去,从而达到数据传递的目的。lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

MainFragment mainFragment =

(MainFragment) getActivity()

.getSupportFragmentManager()

.findFragmentByTag("mainFragment");

mainFragment.setData(mDatas.get(position));

}

});

只需上面区区两步即可达到数据传递的目的。

方法二:

采取接口回调的方式进行数据传递。

step1: 在Menuragment中创建一个接口以及接口对应的set方法://MenuFragment.java文件中

public interface OnDataTransmissionListener {

public void dataTransmission(String data);

}

public void setOnDataTransmissionListener(OnDataTransmissionListener mListener) {

this.mListener = mListener;

}

step2: 在MenuFragment中的ListView条目点击事件中进行接口进行接口回调//MenuFragment.java文件中

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

方法二:采取接口回调的方式进行数据传递if (mListener != null) {

mListener.dataTransmission(mDatas.get(position));

});

step3: 在MainActivity中根据menuFragment获取到接口的set方法,在这个方法中进行进行数据传递,具体如下://在MainActivity.java中

menuFragment.setOnDataTransmissionListener(new MenuFragment.OnDataTransmissionListener() {

@Override

public void dataTransmission(String data) {

mainFragment.setData(data); //注:对应的mainFragment此时应该要用final进行修饰

}

});

通过上面的三步也可以轻松做到Fragment数据之间的传递。

方法三:

使用三方开源框架:EventBus

那么问题来了:EventBus是个啥东西???

简单来说,EventBus是一款针对Android优化的发布/订阅(publish/subscribe)事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

下面我们就用EventBus来实现以下Fragment之间的数据传递:

step1:引入EventBus

compile 'org.greenrobot:eventbus:3.0.0'

step2:注册事件接收者

这里MainFragment是要接收MenuFragment发送来的数据,所以我们在MainFragment中的onCreateView()方法中进行注册:

EventBus.getDefault().register(this);

step3:发送事件

注:发送事件之前其实还有一步定义事件类型,这里我们传递的数据只有一个类型,所以这一步取消了。

MenuFragment发送数据给MainFragment,所以我们在MenuFragment中将要传递的数据进行发送事件操作:lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

EventBus.getDefault().post(mDatas.get(position));

}

});

step4:接收消息并处理

在MainFragment中我们接收来自MenuFragment传递过来的数据,并进行对应的处理(注:EventBus 3.0版本这一步必须要写注解@Subscribe (与2.4版本有所区别)):@Subscribe

public void onEvent(String data) {

bt_main.setText(data);

}

通过上面这一步即可完成数据之间的传递,需要注意的是在销毁的时候我们要注销事件接收。

step5:注销事件接收//MainFragment.java中

@Override

public void onDestroy() {

super.onDestroy();

EventBus.getDefault().unregister(this);

}

以上五步完成了Fragment之间的数据传递,看似比上面两个方法要复杂的多,但当我们涉及到复杂的Fragment之间数据传递(例如Fragment中嵌套多层Fragment)时,就会体会到EventBus的爽快之处~~~这里不进行赘述了。

android fragment面试,Android fragment之间传递数据的方式?相关推荐

  1. Android 之 Navigation在目的地之间传递数据、ViewModel

    文章目录 Android 之 Navigation在目的地之间传递数据.ViewModel 一.在目的地之间传递数据 1. 定义目的地参数 2.使用 Safe Args 传递安全的数据 3.在目的地之 ...

  2. android 活动传递数据,如何在Android应用程序的“活动”之间传递数据?

    我有一种情况,在通过登录页面登录后,每个activity上都会有一个退出button . 点击sign-out ,我将传递已登录用户的session id以便退出. 谁能指导我如何使session i ...

  3. Fragment之间传递数据的方式

    1.直接调用另一个Fragent对象的方法,两个Fragment之间高度耦合 2.采取接口回调的方式进行数据传递.即在一个fragment中创建一接口以及接口对应的set方法,在另一个fagment中 ...

  4. Android在片段之间传递数据

    In this tutorial, we'll be developing an application that contains TabLayout, ViewPager and Fragment ...

  5. android 不同activity之间传递数据

    1> 不同activity之间传递数据: Intent intent=new Intent(); intent.setClass(activity1.this,activity2.class); ...

  6. 在视图控制器之间传递数据

    我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项. 这些产品在另一个带有UITableViewControl ...

  7. 不同Activity之间传递数据--Bundle对象和startActivityForResult方法的实现

    首先,由于Activity是Android四大组件之一,如果一个应用程序中包含不止一个Activity,则需要在AndroidManifest.xml文件中进行声明. 例如进行如下的声明(程序中包含两 ...

  8. Vue父组件和子组件之间传递数据

    Vue父组件和子组件之间传递数据 klmhly 已关注 2018.05.19 19:56* 字数 367 阅读 23评论 0喜欢 0 一.概念解析 挂载点: Vue实例的el属性对应的id,vue只会 ...

  9. iphone 使用委托(delegate)在不同的窗口之间传递数据

    iphone 使用委托(delegate)在不同的窗口之间传递数据 在IOS里两个UIView窗口之间传递参数方法有很多,比如 1.使用SharedApplication,定义一个变量来传递. 2.使 ...

最新文章

  1. android游戏boss坐标,热血江湖手游boss刷新点坐标 boss刷新时间 _图文攻略_高分攻略_百度攻略...
  2. 如何轻松学会一门外语?
  3. python脚本实例手机端-python链接手机用Python实现命令行闹钟脚本实例
  4. 进程间通信——自定义消息方式实现(SetWindowsHookEx)
  5. crt mysql中文乱码_CRT 和mysql 中文乱码解决方式
  6. Mysql 死锁过程及案例详解之插入意向锁与自增锁备份锁日志锁Insert Intention Lock Auto-increment Lock Backup Lock Log Lock
  7. python 输出一个 5*5的 三角形_GitHub标星3W+,80个Python案例,带你轻松玩转Python学习!...
  8. .NET Core计划弃用project.json
  9. 作者:景志刚(1977-),男,现就职于中国人民银行征信中心数据部,主要研究方向为数据挖掘。...
  10. Error:Cannot find module 'stylus'
  11. 流迭代器实现文件操作(读取和写入)
  12. 力扣 面试题 08.04. 幂集
  13. 弱电从业人员必须学习的一些CAD绘图技巧
  14. FPGA串口波特率计算方法
  15. linux 安装xz,在Ubuntu 18.04 LTS下安装linux-5.0.8.tar.xz的方法
  16. springboot基于vue众筹平台系统
  17. linux的一页是多大
  18. 常见的几种网络Hack方式
  19. 托福经验分享:20天从93分考到105分
  20. nodejs 判断是文件夹还是文件

热门文章

  1. 雪花算法id长度_【Java】分布式自增ID算法雪花算法 (snowflake,Java版)
  2. php页面审核,深入理解用PHP实现页面注册审核
  3. 设置透明色有残留怎么办_冬天车玻璃结冰,车被冻住了怎么办?据说只有10%的人做对了...
  4. 高阻态是0还是1_羽毛球拍穿线,先拉横线还是竖线?是否横线要比竖线高1到2磅?...
  5. 1-1 软件构造过程中的多维视图
  6. Python之 range()函数✅
  7. [排版题] 例4.2 叠框
  8. [转]rsync命令中文文档
  9. 动态规划:任务调度问题(双塔问题)
  10. windows批处理运行java程序