在不同的 Activity 或 Fragment 之间共享数据的正确方法是什么?

2023-12-02

我需要一个应该具有 UI 工作流程的应用程序,其中用户应该能够浏览应用程序的特定部分(可以是 ListView 或 GridView),并且他可以点击某个项目以显示该特定项目的详细信息。现在,如果用户向右滑动“即ViewPager”视图分页器应该根据用户滑动的方向更改片段以显示上一个列表中的下一个或上一个项目,而且当用户按回详细项目视图时,现有的 ViewPager 应关闭,并且上一个 ListView 或应显示 GridView,并将 View 的位置设置为用户在 ViewPager 中查看的项目。

为了保持事情简单和高效,两个视图(即 ListView 和 Approach)应该读取和写入相同的数据结构,并且它们应该同步,这样当在一个屏幕上启动加载更多数据时,同时如果用户选择一个特定项目在上一个屏幕中加载完成后,下一个视图应该自动更新数据。

enter image description here

就像Fancy or 9gag

EDIT:我不想维护数据库,我只需要访问数据,直到我的应用程序进程处于活动状态。


Android 使用 Bundle 提供从 String 值到各种 Parcelable 类型的映射。

对于活动:-

Intent in = new Intent(Sender.this, Receiver.class); 
in.putString(key, value)
startActivity(in);

对于片段使用捆绑包:-

Fragment fragment = new Fragment(); 
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);

编辑您的场景:我认为更好的选择是创建应用程序池。

请按照以下步骤操作:- 启动应用程序池:-

ApplicationPool pool = ApplicationPool.getInstance();

详情页修改数据并添加到池中

pool.put("key", object);

从池中获取列表页修改后的数据

Object  object = (Object) pool.get("key");

重要提示:- 获取数据后通知listview或gridview

应用程序池类文件

public class ApplicationPool {

    private static ApplicationPool instance;
    private HashMap<String, Object> pool;

    private ApplicationPool() {
        pool = new HashMap<String, Object>();
    }

    public static ApplicationPool getInstance() {

        if (instance == null) {
            instance = new ApplicationPool();

        }

        return instance;
    }

    public void clearCollectionPool() {
        pool.clear();
    }

    public void put(String key, Object value) {
        pool.put(key, value);
    }

    public Object get(String key) {
        return pool.get(key);
    }

    public void removeObject(String key) {

        if ((pool.get(key)) != null)
            pool.remove(key);

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在不同的 Activity 或 Fragment 之间共享数据的正确方法是什么? 的相关文章

随机推荐

  • 沿着旋转路径附加影片剪辑(通过 AS3)

    我该怎么办 沿着路径 其他影片剪辑 附加影片剪辑 例如 脚步声 这将在一次附加一个影片剪辑的时间间隔内 我需要旋转 即脚步应该根据路径方向旋转 Thanks 1 创建坐标数组 这是你的路 您可以通过多种方法来实际创建数组 但结果应该与此类似
  • java do while循环在满足条件后继续循环

    我是一名新的java程序员 我正在编写一个程序 为3台打印机设置3个型号 如果用户输入错误的值 我希望它继续询问用户型号 我让它工作 但前提是用户输入的第一个值是 3 台打印机之一的编号 如果第一个值不是可能的值之一并且第二个输入是 则它仍
  • 如何在Android中使用dimens.xml?

    当我设计布局时 由于可维护性主题 我将所有维度集中在 dimens xml 中 我的问题是这是否正确 最好的做法是什么 关于这方面的信息很少 什么都没有 我知道将布局的所有字符串集中在 strings xml 上 将颜色集中在 color
  • Python正则表达式搜索十六进制字节

    我正在尝试在二进制文件中搜索一系列十六进制值 但是 我遇到了一些无法完全解决的问题 1 我不知道如何搜索整个文件并返回所有匹配项 目前 我的 f seek 只达到了我认为可能的值 这不好 2 我想以十进制或十六进制形式返回可能匹配的偏移量
  • 未签名的APK无法安装

    我正在尝试将我的应用程序分发给一些人进行测试 我已经直接从 eclipse 将它安装在我的 Desire 上 并且运行良好 要创建 APK 文件 我选择 导出未签名的应用程序包 直接从eclipse 然后创建一个APK文件 我通过电子邮件将
  • Android:如何以编程方式从 url 将图像设置为 imageview

    我有一个来自我的 REST API 的图像 URL 现在我想在加载活动时将其设置为图像视图 下面是我如何从其余 api 获取 bean 然后从中获取 URL Message message new Message String imageU
  • UWP 窗口放置

    我正在 Visual Studio 2015 RC 中创建 net UWP 应用程序 我使用以下代码成功设置了窗口大小 ApplicationView GetForCurrentView TryResizeView New Size wid
  • 分割文件 - Java/Linux

    我有一个包含近 2 5 亿个字符的大文件 现在 我想将其分成几个部分 每个部分包含 3000 万个字符 因此前 8 部分将包含 3000 万个字符 最后一部分将包含 1000 万个字符 另一点是 我想在下一部分的开头包含每个文件的最后 10
  • 如何通过 ZF2 FormElementManager 将 Doctrine ObjectManager 传递到表单

    我想在 ZF2 中创建自定义表单元素 这需要 FormElementManager 我目前在表单创建中使用 Doctrine Hydrator 如下所示本教程 在此方法中 在控制器中创建一个 ObjectManager 对象 并在实例化时将
  • 基于 R 中的值进行迭代和分配的函数

    我正在编写一个函数 该函数迭代一个帐户列表 每个帐户都有一个关联的值 并为该帐户分配名称列表中的一个名称 名称列表将具有关联的值 我希望分配的名称是具有最小值的名称 name totalvalue Jeff 54 Christy 43 Ma
  • Adobe flash cs6 输出窗口在 .exe 文件中执行 Filesteam 操作时自动关闭,但在 Flash 调试模式下工作正常

    我在用Adobe Flash CS6用于创建桌面应用程序 在该应用程序中我使用闪存文件系统文件流保存文本文件 我不想使用文件参考因为我不想显示保存对话框 当我在导出的文件中调用 new FileStream 时 swf or exe文件后
  • 使用 URL 中的 ID 从 mySQL 选择数据

    我有一个包含列的表 GroupID GroupName GroupDesc Overs 1 Test Group Description Yes 我有一个名为 list php 的页面 它当前为组表 上图 中数据库中的每一行创建 URL 该
  • 如何中断 Scanner.nextline() 调用

    SO 上有很多关于中断读取 system in 的线程 但我在这里寻找的是一些关于如何最好地编码我想要实现的目标的建议 我有一个getlogin 需要执行以下操作的方法 要求用户输入所需的登录环境详细信息 如果 6 秒后用户没有输入有效值
  • 从 Android 应用程序中的 Sqlite 数据库读取数据。

    我正在尝试从数据库读取数据 我将数据库导入到sqlite手动 现在只想在 android 应用程序中建立连接 并希望读取行并将其显示在文本字段中 但是我使用的代码要么每次都创建新数据库 要么在该数据库中再次创建表 我出现运行时错误 我的代码
  • 像 € 这样的 Html 实体在 CSV 转换中不会转换为其符号

    我使用过 CSV 解析器http code google com p parsecsv for php 将我的报告导出为 PHP 中的 CSV 我已显示销售总额 euro XXXX XX 在浏览器以及Excel 导出后 中 显示为欧元符号
  • 使用 JavaScript 淡出 Mp3 歌曲

    我正在尝试创建一个嵌入了一些 JavaScript 的 HTML 文件 该文件允许我按下按钮并开始淡出歌曲 我已经设法让它工作 以便它播放歌曲 这是一个开始 但我一直在尝试使用第二个功能来尝试降低音量并在该功能上设置延迟 有人可以帮忙吗
  • WPF C# Web浏览器滚动到顶部菜单

    我有一个网格 里面有菜单和滚动查看器 在滚动查看器中 我有一个带有另一个网格的组框和一个网络浏览器元素 现在 当我使窗口小于网络浏览器内容的内容并在滚动查看器中向下滚动时 问题就出现了 所有内容都有边距 因此它位于顶部菜单下方 但网络浏览器
  • 需要在java中以某种方式识别本地机器

    我试图找出应用程序正在运行的本地计算机的名称 或唯一标识特定计算机的其他方式 我一直在用这个 String hostname java net InetAddress getLocalHost getHostName 效果很好 但我碰巧在分
  • 无法使用 AWS Glue 中的 cx_oracle 连接 Oracle 数据库

    我正在尝试使用 cx oracle 从 AWSglue 连接 Oracle 数据库 但收到此错误消息 数据库错误 DPI 1047 无法找到 64 位 Oracle 客户端库 libclntsh so 无法打开共享对象文件 没有这样的文件或
  • 在不同的 Activity 或 Fragment 之间共享数据的正确方法是什么?

    我需要一个应该具有 UI 工作流程的应用程序 其中用户应该能够浏览应用程序的特定部分 可以是 ListView 或 GridView 并且他可以点击某个项目以显示该特定项目的详细信息 现在 如果用户向右滑动 即ViewPager 视图分页器