【问题标题】:Android cant tell intents apartAndroid 无法区分意图
【发布时间】:2013-12-18 15:44:52
【问题描述】:

在我的主要活动中(一切都发生在我的应用程序中),到目前为止,我只调用了另外两个活动,它们最终通过按下按钮回调我的 MainActivity。我如何区分这两个返回到我的 MainActivity 的 Intent?根据我在两个单独的活动中所做的事情,我有单独的操作我想预先进行。

这是我尝试过的:

Intent intent = getIntent();
String s_message = intent.getStringExtra(AppSettings.EXTRA_MESSAGE);
String f_message = intent.getStringExtra(ViewFavorites.EXTRA_MESSAGE);

if(s_message != null) {
 //do something
} else if (f_message != null) {
 //do something
}

但是当我运行我的应用程序时,我发现在退出这两个活动时,它们正在使用我不希望它们执行的方法......我会不会这样做?

【问题讨论】:

    标签: android android-intent android-activity oncreate


    【解决方案1】:

    我所做的只是在我传递的Intent 中设置一个Extra,然后进行比较。像这样的东西。在创建Intent 时添加一个Extra 来比较

    intent.putExtra("source", "appSettings");
    

    然后在您的Activity 中检查该值是什么

    Intent intent = getIntent();
    String source  = intent.getStringExtra("source");  // get that value here
    
    if(s_message != null) {
        if ("appSettings".equals(source)){
        //do something
        } else if (viewFavorites.equals(source)) {
          //do something else
        }
    }
    

    就分配Extra 的方式而言,您可以使用它的变体,但这是一个对我很有效的简单示例,尤其是当只有少数Activites 将调用它时。

    【讨论】:

      【解决方案2】:

      对每个intent设置不同的ACTION,然后使用if(getIntent().getAction().equals(ACTION))来区分intent。

      public class MainActivity extends Activity {
      
      public static final String ACTION_ONE = "com.yourpackage.ACTION_ONE";
      public static final String ACTION_TWO = "com.yourpackage.ACTION_TWO";
      
      @Override
      protected void onCreate(Bundle savedInstanceState){
           super.onCreate(savedInstanceState);
      
           Intent intent = getIntent();
           if(intent.getAction() != null){
               if(intent.getAction.equals(ACTION_ONE){
                  //DO SOMETHING
               } else if (intent.getAction.equals(ACTION_TWO){
                  //DO SOMETHING
               }
           }
      }
      .....
      

      }

      然后当你带着一个意图开始你的主要活动时:

      Intent intent = new Intent(MY_CURRENT_CONTEXT, MainActivity.class);  //Or MainActivity subclass   
      

      添加

      intent.setAction(ACTION_ONE);
      

      或任何特定于您的意图试图完成的操作。

      【讨论】:

      • 当我这样做时,我的应用程序崩溃了?是否有我应该考虑或发布源代码的即时错误
      • 发布了一些简短的代码,希望能更好地解释这个概念。不太确定为什么您的应用程序会在没有堆栈跟踪/源代码的情况下崩溃。
      • 谢谢!我认为这是因为我没有检查意图的 getAction 是否为空。这是漫长的一周,感谢您抽出时间提供帮助,我真的很感激(-:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      相关资源
      最近更新 更多