如何将字符串传递给已打开的活动?

时间:2013-10-22 09:49:37

标签: android android-intent android-activity onresume

我有3项活动A1,A2,A3

A1调用A2(A1进入堆栈)

A2调用A3(A2也进入堆栈)

A3调用A1(A1应该从堆栈调用而不是新实例...)

我不想创建A1的新实例,只是想从堆栈中调用它

我想向A1发送一些Extra String,问题在这里,当我通过使用putExtra()向A1发送一些String时,A1看不到它!

我在onResume()中为get添加了getIntent(),但是它没有用...

A3中的代码

Intent in = new Intent(A3.this,A1.class);
in.putExtra("ACTIVITY", "A3");
in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(in);

A1中的代码

@Override
protected void onResume() {
  super.onResume();
  Log.e("LOG", getIntent().getExtras().getString("ACTIVITY"));
  if(getIntent().getExtras().getString("ACTIVITY")=="A3"){
     new LoadAllMyOrders().execute();
  }else{
     new LoadAllMyshops().execute();    
  }
}

5 个答案:

答案 0 :(得分:1)

您可以使用应用程序级静态变量并从您想要的任何位置设置其值, 那么你可以从你的活动中访问它!!

答案 1 :(得分:1)

如果我没有误解,您可以使用startActivityForResultonActivityResult对完成此行为。此外,Java中的字符串比较是通过equals方法进行的。 ==比较字符串引用

答案 2 :(得分:1)

您应该将字符串与equals()进行比较,例如

if(getIntent().getExtras().getString("ACTIVITY").equals("A3")

使用==,您只是比较对象引用,这也可能是此表达式求值为false的原因。

答案 3 :(得分:1)

您可以将A1的启动模式设置为“singleTask”,并且您应该从活动的方法“void onNewIntent(...)”获得意图。

答案 4 :(得分:1)

您可以对该变量使用共享首选项,也可以创建一个gettersetter类并使用其对象在任何地方访问它。