代码之家  ›  专栏  ›  技术社区  ›  Mxwan

在两个活动之间检索arrayList的相同值

  •  1
  • Mxwan  · 技术社区  · 7 年前

    我有一个数组,它是在activity\u 1中创建的,必须在activity\u 2中使用。

    我是怎么做到的?

    我创建了一个类(array\u provider.class),它将实现这个数组的getter和setter。

    因此,在activity\u 1中,我初始化了array\u provider的一个对象,然后使用它 创建 我的阵列。

    在activity\u 2中,我还初始化了array\u provider的一个对象,然后使用它 得到 我的阵列。

    但是在activity_2中,当我使用 array_provider.getArray() 即使在我的activity\u 1中,此数组的大小为7。

    因此,我希望在活动之间保持此数组的相同值。

    在提出这个问题之前,我做了一些研究,发现了两种选择。

    1. SharedReference=>但放置数组相当棘手
    2. 子类应用程序=>没有真正的建议

    还有其他解决方案吗? 我错了吗?

    谢谢

    3 回复  |  直到 7 年前
        1
  •  0
  •   Blcknx    7 年前

    重新考虑应用程序的设计!

    如果您有一个数组列表,它通常是多个数组(数据集)的更大模型的一部分。这样的模型不应该存在于单个活动的上下文中,而应该存在于应用程序的一般上下文中。所有活动都可以访问其背后的通用应用程序。

    现在,如果创建或编辑这样的数据集,则将其存储在模型的同一活动中。然后,您只需通过intent传递数据集的ID。在接下来的活动中,您将按照给定的ID从模型中读取数据集。

    默认情况下,Android Studio不会为应用程序创建类。现在许多人认为拥有一个中央应用程序并不重要。如果这不重要,Android库的制造商就不会将意图局限于像IDs这样的简单数据类型。他们设计它不是为了传递模型本身。

        2
  •  0
  •   Yogesh Choudhary Paliyal    7 年前

    您可以通过在数组列表中转换来将数组列表存储在共享首选项中,或者创建可以从任何位置访问的静态数组。

        3
  •  0
  •   Rainmaker    7 年前

    因此,在activity\u 1中,我初始化了array\u provider的一个对象,然后使用 它可以创建我的数组。

    在activity\u 2中,我还初始化了array\u provider的一个对象,然后 用它来获取我的数组。

    但是在activity_2中,当我使用 array\u提供程序。getArray()即使在我的activity\u 1中此数组具有 大小为7。

    你问题的根源 :

    出现此问题的原因是您正在创建不同的ArrayProvider实例,但它们不相同,并且不共享该值!

    可能的解决方案:

    1. 制作阵列 static . 这是最简单的方法,但你不能一直在活动之间共享数据,这是不好的做法。想象一下,有20个活动,几乎所有的变量都可以结束 静止的

    2. 共享引用。这可能看起来很棘手,但如果您的活动之间有一些共享数据,那么这是一种方法。

    3. 依赖注入。(匕首2)例如。它甚至更复杂,对初学者不友好,但它可以允许您在整个应用程序中使用相同的类实例。

    4. 内部数据库。如果您想存储更多共享数据(而不仅仅是一个数组),可以将其存储在轻量级数据库中,例如Android Room

    结论 ,如果是一个数组,我会 静止的 随着应用程序的增长,您应该研究其他数据共享选项