所以我目前有以下内容:
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名称,供以后在函数中使用。
答案 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用于此类任务。
在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”,“”); }
这样您将找到结果