我的应用程序跳过启动意图并执行下一条代码行?

时间:2019-01-11 17:44:33

标签: java android

所以我目前有以下内容:

public void addProject(View v) {
    String pn = "";
    Bundle extras = new Bundle();

    Intent i = new Intent(mMainContext, AddProject.class);
    mMainContext.startActivity(i, extras);

    if(extras.getString("projectName") != null) {
        pn = extras.getString("projectName");
    }
}

这只是一个示例,尽管if语句可能不是,但这与该块无关,第一位是正确的。

我注意到的是,如果我在新的意图上放置断点,则开始活动,然后执行if语句

Android似乎跳过了startActivity并进入了if语句。

如果我随后删除if语句并再次运行它,则它将启动该意图。

所以我意识到它运行到addProject块的末尾,然后实际上启动了意图...

这是为什么?更重要的是,我该如何阻止它呢?

预期结果如下:

1)用户按下“添加项目”按钮 2)启动意图,用户输入项目名称,然后按提交 3)调用intent,然后接收p名称,供以后在函数中使用。

2 个答案:

答案 0 :(得分:1)

  

这是为什么?

startActivity()是异步的。返回时,该活动尚未开始。

  

我如何阻止它这样做?

你不能。

  

预期结果如下:1)用户按下“添加项目”按钮2)启动意图,然后输入项目名称并按下提交3)调用意图,然后接收p名称以供以后在函数中使用。

进行单独的活动可能不是最好的计划(与使用片段相比)。

如果您想使用活动,最自然的方法是:

  • 使用startActivityForResult()代替startActivity()
  • AddProject使用setResult()创建结果Intent并返回到您的第一个活动
  • 让您的第一个活动覆盖onActivityResult(),在那里它可以收到该结果的副本Intent,并从中获取结果

请注意,这addProject()返回后仍然会全部发生。但是,您将(最终)获得结果。

Android文档不能很好地解决这个问题,但是this is what it has on the subject

答案 1 :(得分:0)

您必须将onActivityResult用于此类任务。

  • 在您的主要Activity中使用:startActivityForResults(intent)就位 startActivity()的;
  • 在AddProject活动中,当用户输入项目名称并按 按钮。

    意图i = new Intent();     i.putExtra(“ projectName”,userInputTextFromEditText);     setResults(RESULT_OK,i)

  • 在您的MainActivity中

    受保护的void onActivityResult(int requestCode,int resultCode,@ Nullable Intent数据){   pn = intent.getExtras.getStringExtra(“ projectName”,“”); }

这样您将找到结果