如何从其他活动中获取视图?

Posted

技术标签:

【中文标题】如何从其他活动中获取视图?【英文标题】: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 在此会话期间/此过程中从未存在过。你不应该依赖两者之间的这种联系。 您的列表视图是否有自定义适配器? 【参考方案1】:

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

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

你能/应该做什么?

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

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

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

这一切的数据在哪里?

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

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

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

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

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

【讨论】:

以上是关于如何从其他活动中获取视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何从应用程序中其他应用程序的所有活动列表中获取主要活动名称?

如何从数据流中获取特定数据以用于 Azure 数据工厂中的其他活动

如何将值从其他活动传递给 viewpager 片段?

如何在视图绑定中的活动中获取回收者视图当前项目文本值

如何在第一个活动中更新回收站视图,同时更改其他活动中的数据?

如何从其他视图制作我自己的 XML 布局视图