android - 活动未使用新意图更新
问题描述
我有一个以意图中传递的 ID 开头的 ActivityA。在另一个线程中,在收到 ID 时确定弹出窗口。然后就可以用这个ID打开ActivityA了。打开 ActivityA 时,使用的是您提交的 ID。
但是如果ActivityA是打开的,ID不会更新为新提交的ID吗?
活动A:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.order_detail);
getId();
}
@Override
protected void onResume() {
super.onResume();
getId();
}
private void getId(){
long id = getIntent().getLongExtra("ID", 0L);
}
弹出窗口:
Intent intent = new Intent(this, ActivityA.class);
intent.putExtra("ID", newId);
startActivity(intent);
谢谢你的回答!
解决方案
一旦打开 ActivityA,额外的值就会被设置并且不可更改。
你确实有几个选择:
- 开始一个新的 ActivityA 副本 - 根据设计,这可能是更糟糕的解决方案,这不是我的建议,但你可以这样做。
- 由于您提到 ID 是由线程计算的,因此更好的解决方案是实现 ActivityA 实现的接口并让线程调用接口方法,该方法反过来可以更新 ID。请记住,如果由于更改 ID 导致访问 UI 元素,您必须在主线程上执行此操作。
这个链接应该有帮助: android-how-to-send-interface-from-one-activity-to-another,它与我上面提到的原理相同。
推荐阅读
- javascript - 类型错误:arr.reduce 不是函数
- c# - 如何返回带有对象名称的 JSON?
- jenkins - 如何从 Jenkins 管道中的 Groovy 脚本中注入环境变量
- javascript - @Html.PasswordFor(m => m.Password) 显示到屏幕?
- ruby-on-rails - 如何在 Rails 5.2 中允许哈希数组
- c++ - c ++用逗号和macro2连接macro1文本
- ruby - Ruby Bunny 交换 wait_for_confirm 或死亡
- javascript - 如何检查具有可变子元素的元素是否包含具有特定值的数组属性?
- r - 映射列表和 mutate_at 以应用函数
- javascript - import "./app.js" 有效,但 "./app" 无效。为什么?