获取intent额外信息和onCreate方法?

9
我有A、B和C三个类。A类发送了一个intent到B类,B类运行C类,C类返回到B类......但是在B类的onCreate方法中,它需要A类的intent。但是由于它来自C类,所以它没有得到它,但我仍然需要A类的intent。
有什么解决办法吗?我猜一个解决方案可能是将extra.getString存储在数据库或类似的地方。
Bundle extras = getIntent().getExtras();
 newString = extras.getString("ID"); 

1
你的意思是:A->B->C->A(如你所写),还是A->B->C->B(如你后来所暗示)? - Neil Townsend
抱歉,我想表达的是 A->B->C->B。 - user1876202
你只想要的是来自于“ID”的字符串吗? - Hoan Nguyen
@user1876202 谢谢 - 我已经写了一个答案的开头,如果你能评论并回答问题,我今天稍后会再次查看。 - Neil Townsend
3个回答

8

由于我不知道你的活动流程,所以这是一个解决方案,但可能不是最合适的。

当你启动新的活动时,请添加一个额外的

intent.putExtra("ID_FROM_A", value); // except for ActivityA value = mIdFromA
startActivity(intent);

在接收活动中

onCreate()
{
    mIdFromA = getIntent().getStringExtra("ID_FROM_A");
}

2

如果我的理解是正确的:

Activity A:

  • 创建intentAtoB
  • 启动Activity B

Activty B:

  • 接收intentAtoB
  • 创建intentBtoC
  • 启动Activity C

Activity C:

  • 接收intentBtoC
  • 做一些事情

现在问题来了:Activity C会:

  1. 使用finish()返回到Activity B,还是

  2. 重新启动Activity B?

如果选择1,当你返回到Activity B时,它仍然保留了第一次创建时设置的所有信息。因此,您需要从onCreate方法中提取来自intent中的所有信息。

如果选择2,则只需要在用于启动每个活动的意图中向下传递信息即可。

如能(a)确认顺序和(b)澄清为什么上述方法不起作用,我们肯定可以继续前进。


方法一:使用finish()返回B活动更好。只需在B活动的onCreate()中将值存储在类级变量中,就像我在上面的答案中建议您的那样。 - user370305
@user370305 我同意这是更好的方法,我只是想弄清楚问题作者实际在做什么,以便从他们现有的起点帮助他们。 - Neil Townsend

0

你可以通过一个额外的证明“它是A类”的东西从A类中获取意图,然后将其设置为本地意图。

extras = getIntent().getExtras();
String a = extras.get("KEY");

if (a.equlas("A_CLASS") {
    class_a_extras = getIntent();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接