我正在开发Android应用。我有一个Activity来检查我的设备上是否存在XML文件。如果它不存在,我会调用一个执行大量操作的例程,包括从URL下载该文件。
如果确实存在,我想提示(是/否)用户是否要重新下载该文件,或者只是跳过它。
我开始使用Dialog。我看到的讨论说Dialogs只是异步的,所以我转而使用Activity来提示是/否。
进一步阅读之后,我相信真正的答案是使用startActivity()
启动一个Activity会异步启动Activity,但使用startActivityForResult()
会同步关闭(阻塞)。这个陈述是否正确?
好的,假设我的上述陈述是正确的,我一直在研究如何回到代码流程中的原始起点,知道用户选择了哪个按钮(是/否)。
所有的例子都告诉我,我需要使用它来获得我的结果。
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
}
我正在努力解决如何将其放入我的代码中以使其更容易流动。我看到很多示例都显示了所需的代码片段,但我不清楚它们是如何组合在一起的。我的代码结构是否像这样结束:
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
恢复流量会很棒,但这似乎不可能。我在这里纠正吗?
答案 0 :(得分:1)
startActivityForResult()
是异步的。由于用户界面会发生变化并且您的通话活动将暂停(您的onPause()
方法将会被调用),因此它可以让用户感到同步。
然而,您的通话活动仍然可以运行代码;当你为结果启动的活动完成时,你将实现一个回调来调用(这使得它非常像一个对话框)。
答案 1 :(得分:0)
我发现使用 startActivityForResult
和 onActivityResult
会将 startActivityForResult
之后的流移动到 onActivityResult
并中断 startActivityForResult
的流。我想过如何在startActivityForResult
之后继续流动而不破坏它。在思考合适的方法的同时,我终于找到了“从活动中获得结果”的内容。希望这会有所帮助。
这是a link!