我正在開發一個Android應用程序。我有一個Activity來檢查我的設備上是否存在XML文件。如果它不存在,我會調用一個包含一系列內容的例程,包括從URL中下載該文件。使用startActivityForResult()的代碼流
如果確實存在,我想提示(是/否)用戶看他們是否要重新下載文件,或者只是跳過它。
我開始使用對話框。我看到的討論表示,對話框只是異步的,所以我轉而使用一個活動來提示是/否。
經過進一步閱讀後,我相信真正的答案是,使用startActivity()
開始活動異步啓動活動,但使用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
的流量,這將是非常好的,但這似乎不可能。我在這裏糾正?
我明白你在第一個陳述中的意思。在第二個語句中,我僅限於返回到'onActivityResult()'例程,還是可以返回到我離開的地方(在'startActivityForResult()'後面)?我擔心的是我有很多參數需要傳遞給被調用的Activity,然後返回到調用例程。 – Chuck
而且,你能否指出我是一個「完整」的例子,而不是那些只是展示作品的人?謝謝!!! – Chuck
當您的活動調用'startActivityForResult()'時,您的代碼將不會被阻止,因此您無法返回到停止的位置。我認爲你正在考慮線性編程,這實際上不是UI開發的方式......你需要考慮更多的事件驅動。一些事件('onCreate()',可能)導致你的代碼運行。您的事件處理功能將運行至完成,然後您才能收到其他事件(例如您的兒童活動的結果)。 – mah