【问题标题】:How to differentiate between intents, when received by multiple activities当多个活动收到时如何区分意图
【发布时间】:2015-12-15 08:18:29
【问题描述】:

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

Activity A 和 Activity B 向 Activity C 发送一个意图,假设代码如下:

ActivityA 发送意图:

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

ActivityB 发送 Intent:

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");

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

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

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

    在活动B中,

     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");
    }
    

    【讨论】:

    • 在活动 C 中从活动 A 和 B 获取意图需要什么?是否“意图意图 = getIntent();”从 A 和 B 获得两个发送意图?还有一个空检查“className”和“s”吗?
    【解决方案2】:

    用你的 Intent 再添加一个;

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

    【讨论】:

      【解决方案3】:

      所以这就是发生的事情:

      假设活动 C 由活动 B 启动。是否有一个与名为 ListName 的键关联的字符串?不,因此是空值。

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

      一种方法是在 Intent Extras 中放置一个字段,告诉您它是哪个活动。

      另一种方式是这样的:

      String s = getIntent().getStringExtra("ListName");
      if( s != null ){
        // do what you would do if activity B started activity C
      } 
      

      【讨论】:

      • 这实际上解决了我的问题,但是@Jas 的评论有助于在将意图发送到同一类时识别不同的类。
      【解决方案4】:

      您需要使用调用活动的类名称向意图添加一个额外的值

      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方法中

      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
              }
      

      【讨论】:

        猜你喜欢
        • 2014-11-24
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多