我正在开发一款 Android 应用。我有一个 Activity 来检查我的设备上是否存在 XML 文件。如果它不存在,我会调用一个例程来执行一系列操作,包括从 URL 下载该文件。
如果它确实存在,我想提示(是/否)用户看看他们是否想重新下载文件,或者只是跳过它。
我从使用对话框开始。我看到的讨论说 Dialogs 只是异步的,所以我改用 Activity 来提示是/否。
进一步阅读后,我相信真正的答案是使用 startActivity()
启动 Activity 会异步启动 Activity,但使用 startActivityForResult()
会同步启动它(阻塞)。这种说法正确吗?
好的,假设我上面的陈述是正确的,我一直在研究如何回到代码流中的原始起点,知道用户选择了哪个按钮(是/否)。
所有的例子都告诉我,我需要用它来得到我的结果。
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
}
我正在努力解决如何将其放入我的代码中以使其更容易流动的问题。我看到很多示例显示了所需的代码 fragment ,但我不清楚它们是如何组合在一起的。我的代码结构最终是这样的吗:
public class MainScreen extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
protected void onButtonClick(parameters) {
/* Do some work to see if the file exists */
if (!file.exists()) {
runComplexRoutine(various_parameters);
} else {
Intent myIntent = new Intent(getBaseContext(), PromptingActivity.class);
myIntent.putExtra("filename", variable_holding_filename); // Just passing a parameter to use in the title of the caled Activity
startActivityForResult(myIntent, 1);
// Point A
}
}
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
if (resultsCode == Activity.RESULT_OK) {
runComplexRoutine(various_parameters);
}
// else, do nothing...
}
}
我的问题是我必须传递大量的 various_parameters
。如果我可以在 Point A
恢复流程,那就太好了,但这似乎不可能。我在这里正确吗?
最佳答案
startActivityForResult()
是异步的。它对用户来说感觉是同步的,因为 UI 会改变并且您的调用 Activity 将暂停(您的 onPause()
方法将被调用)。
但是您的调用 Activity 仍然能够运行代码;你将实现一个回调,当你为结果开始的 Activity 完成时调用(这使得它很像一个对话框)。
关于android - 使用 startActivityForResult() 的代码流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167003/