【问题标题】:How do I get a view from other activity?如何从其他活动中获取视图?
【发布时间】:2019-10-26 02:10:37
【问题描述】:

假设我有两个活动/课程。 MainActivitySecondActivity。对于这些活动中的每一个,我都有单独的 XML 文件。在SecondActivity中,我有一个ListView,ID 为listview

如何从 MainActivitySecondActivity 中检索 ListView

我尝试了简单明了(在 MainActivity.java 中):

ListView listview = (ListView) findViewById(R.id.listview);

但是当我尝试在其上设置适配器时,这会使我的应用程序崩溃 (nullPointerException)。我尝试将它直接放在我的类中,以及 onCreate 方法中。两者都会导致崩溃。

导致崩溃的行如下所示:

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
listview.setAdapter(adapter); //crash (nullpointerexception pointing to nullobject)

我想要做的是获取该 ListView 并使用“listview”对象将元素添加到我的 MainActivity 中的列表视图。

【问题讨论】:

  • "如何从 MainActivity 中的 SecondActivity 中检索 ListView?" -- 你没有,就像一个网页不访问另一个网页的 DOM 一样。如果 UI 的这些位是如此紧密耦合,则将它们设为具有共享 ViewModel 的片段。
  • Activity 是具有关联窗口的流程入口点,而不仅仅是“屏幕”或“UI 元素”或“视图”。您可以以SecondActivity 存在的方式启动应用程序,但MainActivity 在此会话期间/此过程中从未存在过。你不应该依赖两者之间的这种联系。
  • 您的列表视图是否有自定义适配器?

标签: java android listview android-activity


【解决方案1】:

在 Android 中(有例外),您不能同时运行多个活动。您可以有多个 Fragment,但一次显示单个活动(好吧,这不再是 100% 正确,但出于所有意图和目的,情况仍然如此)。

您正在尝试做的事情在 Android 中被认为是非常糟糕的做法(以及 iOS 中的价值)。

你能/应该做什么?

您的要求似乎是某种形式:我有一个项目列表,并且我还有另一个活动,我想在所述列表中添加或删除内容。

这很好,但您不需要“两个活动”来执行此操作。

有一个活动来显示列表,当你想添加内容时,要么启动另一个活动来显示“编辑/添加”的 UI,要么使用片段(一个片段有列表,另一个有用于编辑列表的 UI)。

这一切的数据在哪里?

存储在第三个地方(我们称之为“YourListRepository”),这是一个类,其中:

  1. 从“列表”中,您只需说:存储库,给我最新的列表!
  2. 在“编辑”屏幕中,您会说:存储库,给我列表中的项目“N”。然后,你会说:存储库,这是更新的项目“N”,刷新它。

返回 1(显示更新的列表)是自动的,因为它要求“获取最新列表”。

在哪里可以了解更多信息?

鉴于您发布的问题的期限,您似乎对 Android 开发比较陌生,因此我建议您花一个小时的时间阅读 Google 官方文档中的 Application Fundamentals

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2013-09-25
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多