android - 如何在 Android 中的 Activity 之间进行通信
问题描述
我是 Android 新手(但不是 java 新手),我对服务、ViewModel、广播事物和其他用于在活动之间进行通信的替代方案感到困惑。我的沟通需求非常基本。
考虑Midiscope的MainActivity。我想做类似的事情,但使用 Spinner 在不同的 Activity 上选择源。基本上一个用于 Spinner 的 Activity(称为“SettingsActivity”,但由于该边距太长的原因显然不能成为真正的设置)和另一个用于带有 TextView 的 UI 的 Activity,称为 TextViewActivity。如果我共享静态变量以从设置访问 TextViewActivity,我可以让它工作,这样我就可以从设置创建 LoggingReceiver,但将它绑定到 TextViewActivity 而不是设置(this
)。显然这是不对的(TM),所以我尝试了所有我可以用谷歌搜索的选项都无济于事。实现这一目标的最简单方法是什么?
我尝试了ViewModel并且文档中的示例崩溃
MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
了error: no suitable constructor found for ViewModelProvider(MyActivity)
(是的,我在该文档页面上投了 1 星)。从接受的答案到有关它的问题(即使用)的“解决方案”new ViewModelProvider.NewInstanceFactory()
崩溃java.lang.RuntimeException: Cannot create an instance of class com.example.MyViewModel
然后我尝试了https://developer.android.com/guide/components/services中描述的 IntentService但有两件事我不清楚,所以这可能不是解决我的问题的正确方法:
- 我应该做什么
onHandleIntent
?我的 Intent 本身什么也不做,它应该只是从 MIDI 到我的 UI 之间的传递 - 如何从上述两个活动中访问和使用 IntentService?当然,单例模式,但如何确保我不会创建与共享 Activity 的静态实例导致的相同问题?
- 我应该做什么
解决方案
如果您想将一些基本数据从一个活动传递到另一个活动,您应该使用Intent
如何使用它:
Activity1(向Activity2发送数据):
Intent intent = new Intent(context, TextViewActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
Activity2(从 Activity1 接收数据):
String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");
推荐阅读
- project-reactor - 单声道超时时的“操作员称为默认 onErrorDropped”
- android - 如何使对话框布局与 MainActivity 类中的 Gridview 交互
- r - 在 R 中安装“汽车”包时遇到问题。
- javascript - 您如何托管 Firebase 功能和单页应用程序?
- focus - 当焦点区域中的多个视图发生变化时,无法将所需视图设置为焦点
- c - 如何将非 const 动态多维数组传递给需要 const 多维数组的函数?
- c - c代码文件崩溃,编译时没有错误
- javascript - addEventListener 到多个复选框
- ansible - Ansible:变量/循环中的变量或迭代项目
- c# - 找不到 Windows.ApplicationModel