【问题标题】:Passing an ArrayList to a new Activity将 ArrayList 传递给新的 Activity
【发布时间】:2014-03-13 04:25:12
【问题描述】:

我是 Java 新手,我在这里看到了 link,我的问题非常相似,但我不明白它是如何工作的。

我有一个带有一些变量的 ArrayList,我如何填充这些变量并将其传递给一个新的活动?我的新活动被命名为 Detail.java

我将我的 ArrayList 创建为

public final List<Car> ExtraCars = new ArrayList<Car>();

所以我可以在下一个活动中使用,我不确定这是否是最好的使用方式。

这辆车的结构是:

public Car (String make, int year, int iconID, String condition){
    super();
    this.make = make;
    this.year = year;
    this.iconID = iconID;
    this.condition = condition;
}

我想知道如何用一些随机变量填充这个 ExtraCars,比如 make = actualmake; 并将所有这些都传递给 Detail.java

并且还要在 Detail.java 上检索这些信息,我应该这样做吗?

Intent intent = getIntent();
String make = intent.getStringExtra(MainActivity.ExtraCars.make);

【问题讨论】:

  • 看看这对你有没有帮助:stackoverflow.com/questions/21732520/…
  • 谢谢,我会读这个
  • 只需在类中声明一个公共函数,将其放入参数中。或者在意图的附加部分中传递它。或一百万种其他方式。你多虑了。 Activity 仍然是一个类。这仅取决于您如何以及何时需要有关如何构建它的信息。

标签: java android arraylist


【解决方案1】:

我会避免像 daentech 建议的那样公开任何内容,因为这绕过了广受好评的 Java 封装和数据保护机制。而是尝试 pedromss 的链接。还有……

Bundles 是另一种选择,看看这个: https://stackoverflow.com/a/6681784/3199478

【讨论】:

    【解决方案2】:

    正如您链接的帖子所述,您可以将其设为公共静态变量:

    public static List<Car> ExtraCars = new ArrayList<Car>();
    

    为了在 Detail.java 中检索数据,您不需要 getStringExtra,只需使用:

    String make = MainActivity.ExtraCars.get(index).make;
    

    然后您不需要在意图中传递 ArrayList

    但这并不遵循 java 的最佳实践

    【讨论】:

    • 糟糕的实现,违反了OOP的一些最有价值的原则,增加耦合,容易出错,低内聚,不封装......
    • stackoverflow.com/a/5567079/4739 的答案建议相同,并引用了声明公共静态字段的 Android 文档。
    • 如果您在列表底部多看一点,有一个答案比实际接受的答案多两倍,这是正确的方法,以这种方式引用静态是第一个蹩脚的代码步骤...
    • 我很抱歉。这是一种更好的方法:)
    • 感谢 daentech,完全值得,我知道私有和公共有一些限制,但是我对 java 不太熟悉,这对我来说不是问题,我希望不是一份也给我的老师。非常感谢!
    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2017-02-13
    • 2018-10-02
    • 2016-01-14
    相关资源
    最近更新 更多