当前位置: 首页 > news >正文

Android --- 运行时Fragment如何获取Activity中的数据,又如何将数据传递到Activity中呢?

1.通过 getActivity() 方法获取 Activity 实例:

在 Fragment 中,可以通过 getActivity() 方法获取当前 Fragment 所依附的 Activity 实例。然后可以调用 Activity 的公共方法或者直接访问 Activity 的字段来获取数据。

// 在 Fragment 中获取 Activity 中的数据示例
if (getActivity() != null) {MyActivity activity = (MyActivity) getActivity();String data = activity.getData();// 使用获取到的数据
}

2.通过回调接口传递数据:

定义一个接口,在 Fragment 中实现该接口,并在 Activity 中设置接口的回调,这样可以实现 Fragment 向 Activity 传递数据的双向通信。

步骤如下:

在 Fragment 中定义一个接口:

public interface OnDataReceivedListener {void onDataReceived(String data);
}

在 Fragment 中保存接口的实例,并在合适的时机调用接口方法传递数据:

private OnDataReceivedListener listener;@Override
public void onAttach(@NonNull Context context) {super.onAttach(context);if (context instanceof OnDataReceivedListener) {listener = (OnDataReceivedListener) context;} else {throw new RuntimeException(context.toString()+ " must implement OnDataReceivedListener");}
}// 在合适的时机调用接口方法传递数据
if (listener != null) {listener.onDataReceived(data);
}

在 Activity 中实现接口:

public class MyActivity extends AppCompatActivity implements MyFragment.OnDataReceivedListener {@Overridepublic void onDataReceived(String data) {// 处理从 Fragment 传递过来的数据}
}

3.通过 ViewModel 共享数据:

使用 ViewModel 来管理数据,Fragment 和 Activity 都可以通过获取同一个 ViewModel 实例来共享数据。这种方法适用于需要在 Fragment 和 Activity 之间共享大量数据的情况。

在 Activity 中创建 ViewModel:

MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class);

在 Fragment 中获取相同的 ViewModel 实例:

MyViewModel viewModel = new ViewModelProvider(requireActivity()).get(MyViewModel.class);

通过 ViewModel 共享数据:

// 在 Activity 或者 Fragment 中设置和获取 ViewModel 中的数据
viewModel.setData(data);
String data = viewModel.getData();

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 初识c++(命名空间,缺省参数,函数重载)
  • 安全防御实验2
  • 函数(实参以及形参)
  • 交换机的二三层原理
  • 速盾:如何加强网站的安全性
  • 【web]-f12-iphone6
  • 分手后如何走出夜晚的抑郁,告别失眠困扰?
  • 短视频SEO矩阵系统:源码开发与部署全攻略
  • keepalive检测VIP地址漂移主备切换
  • JAVA-----String类补充
  • 使用Spring Boot实现分布式锁
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • Linux Mac 安装Higress 平替 Spring Cloud Gateway
  • Linux_网络编程_TCP
  • 汽车软件开发:ASPICE与ISO26262标准下的质量管理与控制实践
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 0基础学习移动端适配
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • express.js的介绍及使用
  • jQuery(一)
  • Logstash 参考指南(目录)
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Spring Cloud中负载均衡器概览
  • SQLServer插入数据
  • 百度小程序遇到的问题
  • 三栏布局总结
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • gunicorn工作原理
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (26)4.7 字符函数和字符串函数
  • (k8s)kubernetes集群基于Containerd部署
  • (pytorch进阶之路)扩散概率模型
  • (二)windows配置JDK环境
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (四) Graphivz 颜色选择
  • (转)Mysql的优化设置
  • (转)shell调试方法
  • (转)程序员技术练级攻略
  • (转载)PyTorch代码规范最佳实践和样式指南
  • *** 2003
  • 、写入Shellcode到注册表上线
  • .NET 5种线程安全集合
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET/C# 使窗口永不获得焦点
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .NET实现之(自动更新)
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .net与java建立WebService再互相调用
  • @Controller和@RestController的区别?
  • @Import注解详解
  • @Service注解让spring找到你的Service bean