【问题标题】:Android/java App: pass data from one activity to another RUNNING activityAndroid/java App:将数据从一个活动传递到另一个正在运行的活动
【发布时间】:2021-02-08 15:08:28
【问题描述】:

在我的主要活动 (A) 中,我有一个数据收集过程,它定期用结果填充一些数组。在某些时候,用户可能想要检查这些结果,并通过单击 A 中的按钮,一个新的活动 (B) 开始并显示它们。我已经做到了这一点,即startActivity(intent);

但是,我想要更多:如果 B 正在运行并且数据(位于 A 中)发生更改,我想更新 B 的屏幕以显示这一点。我已经看到如何在 B 中覆盖 onNewIntent(Intent i) 并且我理解这一点。但我不知道如何将带有更新数据的意图从 A 内发送到 B。我重复一遍:不是在创建 B 时而是在 B 已经运行时。

当从 A 中创建时,我似乎无法找到如何保留对 B 的引用。而且我似乎无法找到如何向 B 发送任何内容。

我的设计有缺陷吗?

【问题讨论】:

  • 您也许可以使用共享视图模型甚至界面?
  • @SarahKhan 感谢您将我指向共享视图模型。我会读到这个,它看起来是一种将数据传递给活动的更理智的方式。 “接口”是指将在所有活动之间共享的单例吗?
  • 只需在活动A中使用MutableLiveData<ArrayList<String>>()代替ArrayList,观察活动B的变化。更多详情可以访问developer.android.com/topic/libraries/architecture/livedata
  • 单例类是另一种方式,但不太推荐。以接口为例,看这里的答案stackoverflow.com/questions/65932555/…
  • @satya-p91 明白了,谢谢

标签: java android android-intent android-activity


【解决方案1】:

我已遵循 @sarahkhan 和 @satya-p91(谢谢!)的建议,使用包含 LiveData 的 ViewModel。

但我很快意识到,作为一个 android nube,ViewModel 与它在创建时附加到的 Activity 的生命周期相关联,并且会在辅助(非主)Activity 死亡时死亡,即使那是后退-按钮。

为了使数据在 ViewModel 中持久保存,即使该 ViewModel 在其 Activity 死亡时也死亡,我们将其设为 static。所以我有类似的东西:

public class AllViewModel extends ViewModel {
  static MutableLiveData<List<String>> myData = new ArrayList<>();
...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多