【问题标题】:Android Java : Call method of an activity in another activityAndroid Java:在另一个活动中调用一个活动的方法
【发布时间】:2021-04-29 17:37:04
【问题描述】:

我有三个活动,A、B 和 C。

  1. 在活动 A 中,我有两个函数可以从我在回收站视图中显示的 firebase 获取销售数据。
  2. 用户可以在Activity A中搜索产品,搜索结果显示在Activity B中。
  3. 在活动 B 中选择产品会打开活动 C,用户可以在其中购买产品。
  4. 此时,我想从Activity C调用Activity A的两个函数,为回收站View更新Activity A中的数据。 这导致了我最初的问题,如何在活动 C 中获取活动 A 的方法。或者如果有更好的方法可以做到这一点,请指导这个新手,谢谢。

更新

似乎有些人误解了,所以想澄清几点。

  1. 出于这个特殊原因,我不能使用片段,尽管这将是一个非常简单的解决方案。
  2. 其次,一切正常,我只是想知道是否可以通过在本地添加 Activity C 中的数据来更新 Activity A 中的数据,而无需每次都从 firebase 获取。但是感谢您的反对,哈哈

【问题讨论】:

  • 您的所有问题都可以通过使用带有片段的单个活动来解决
  • 我在底部导航视图中的活动 A 中已经有 4 个片段,还有更多,此时设计过于复杂,我无法添加更多片段,因此我只想保持简单暂时只是活动。 Ps 添加更多片段导致我无法在任何地方找到解决方案的异常,因此我转向仅活动。
  • 我真的不明白/理解你的代码是如何因为片段而变得更复杂的,但是好的
  • 我同意@a_local_nobody 使用带有片段的视图模型是要走的路。 Google 建议为您的应用程序使用单个 Activity,然后在 Activity 之上添加片段,这将允许为更大的屏幕提供不同的布局。如果设计太复杂,我建议找到一种方法来降低复杂度,以便应用程序可维护。如果它太复杂而你正在努力,想象一下当你想添加一个新功能时,它会多么辛苦地工作 6 个月。
  • @a_local_nobody 谢谢大家,我明白你在说什么。只是我正在为一个学校项目做这个应用程序,在截止日期前,一周后我再也看不到这个应用程序了。这仍然不能证明我正在做的事情是合理的,但此时我只想完成它,所以我从使用片段转向在活动中执行它,因为我已经嵌套了 3 个片段并且它导致了一些奇怪的异常。无论如何,对于以后阅读本文的任何人,您应该只使用片段而不是像我一样。

标签: java android android-activity


【解决方案1】:

好像你把它复杂化了。

当您在活动 C 中购买产品时,您应该将数据存储在 Firebase 数据库中。当您返回 Activity A 时,您应该从 firebase 获取已购买物品的列表并显示它们。

您不能从 Activity C 调用 Activity A 的方法。所以不要害怕每次打开 Activity 时都在 onCreate() 方法中从 Firebase 获取数据。

【讨论】:

  • You cannot call methods of Activity A from Activity C 真的吗?你对此有多确定?
  • @a_local_nobody 如果你真的尝试,你可能可以。但是在没有初始化视图的活动中更新回收器视图是不可能的
  • 谢谢,我已经这样做了。我只是好奇我是否可以通过在活动 c 中本地添加新的销售数据来更新活动 a 中的数据,而无需每次都从 firebase 再次获取它。
  • @Jak 您可以将其存储在 ROOM 数据库中,或者如果您想要更简单的解决方案但对于这种情况不太理想,您可以使用 sharedPreferences。这会将数据本地存储在 android 设备上。
  • @OskarLasota 谢谢,我看看 :)
【解决方案2】:

您可以创建一个 searchList 并在 Activity A 的 searchList 中添加这些搜索或选定的项目,并通过意图中的 parcelable Array List 与 Activity B 共享该列表。 从活动 A 中分享您的列表,

ArrayList<Object> object = new ArrayList<Object>();
Intent intent = new Intent(Current.class, Transfer.class);
Bundle args = new Bundle();
args.putSerializable("ARRAYLIST",(Serializable)object);
intent.putExtra("BUNDLE",args);
startActivity(intent);

并像这样在 Activity B 中获取该列表,

Intent intent = getIntent();
Bundle args = intent.getBundleExtra("BUNDLE");
ArrayList<Object> object = (ArrayList<Object>)args.getSerializable("ARRAYLIST");

如果您想与 Activity C 共享相同的列表,请再次共享该列表,就像我们在 Activity A 中所做的那样,并通过像 Activity B 这样的捆绑包获取该列表。

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多