当多个活动收到意图时,如何区分意图

时间:2015-12-15 08:18:30

标签: android android-intent

假设我有3项活动,Activity AActivity BActivity C

活动A和活动B向活动C发送意图,并说明以下代码:

ActivityA发送意图:

Intent i = new Intent();
i.putExtra("ListName", s);
i.setClass(ActivityA.this, ActivityC.class);
startActivity(i);

ActivityB发送意图:

Intent i = new Intent();
i.putExtra("PersonName", s);
i.setClass(Activityb.this, ActivityC.class);
startActivity(i);

我如何在ActivityC中知道哪些Intent已被接收,因为每当调用ActivityC时,它将始终传递这行代码,用于ActivityA或ActivityB

if(getIntent() != null && getIntent().getExtras() != null)

然后在这行代码上给我NullPointerException,如果意图是从ActivityB发送的

String s = getIntent().getStringExtra("ListName");

4 个答案:

答案 0 :(得分:3)

再添加一个额外的Intent;

Intent i = new Intent();

i.putExtra("TAG",classname);
i.putExtra("key","value");

答案 1 :(得分:3)

在Intent中为类名添加额外的字段,

In ActivityA,
Intent i = new Intent();
i.putExtra("ListName", s);
i.putExtra("Class","A");
i.setClass(ActivityA.this, ActivityC.class);
startActivity(i);

在ActivityB中,

 Intent i = new Intent();
    i.putExtra("PersonName", s);
    i.putExtra("Class","B");
    i.setClass(Activityb.this, ActivityC.class);
    startActivity(i);

在您的ActivityC中,检查标签“Class”

String className = getIntent().getStringExtra("Class");
if(className.equals("B"))
{
String s = getIntent().getStringExtra("ListName");
}

答案 2 :(得分:0)

所以这就是发生的事情:

假设活动C是由活动B启动的。是否存在与名为String s = getIntent().getStringExtra("ListName"); if( s != null ){ // do what you would do if activity B started activity C } 的密钥相关联的字符串?不,因此空值。

那你如何区分这些活动呢?

一种方法是将一个字段放在intent extras中,告诉你它是哪个活动。

另一种方式是:

 <c:if test='${firstNumber.matches(".*[0-9].*")}'>

答案 3 :(得分:0)

您需要使用调用活动的类名称

向intent添加一个额外值
Intent intent = new Intent();  
intent.setClass(A.this,MyActivity.class);
intent.putExtra("ClassName","A");  
A.this.startActivity(intent);

Intent intent = new Intent();  
intent.setClass(B.this,MyActivity.class);
intent.putExtra("ClassName","B");  
B.this.startActivity(intent);

Intent intent = new Intent();  
intent.setClass(C.this,MyActivity.class);
intent.putExtra("ClassName","C");  
C.this.startActivity(intent);

然后在MyActivity的onCreate Method

Intent intent = this.getIntent();


 if(intent !=null)
 {
 String clsname= intent.getExtras().getString("ClassName");
 if(clsname.equals("A"))
 {
  //Do Something here...
 }
if(clsname.equals("B"))
{
//Do Something here...
}
if(clsname.equals("C"))
{
 //Do Something here...
}       }



        }
        else
        {
            //do something here
        }