2012-08-28 23 views
2

我正在開發一個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的流量,這將是非常好的,但這似乎不可能。我在這裏糾正?

回答

1

startActivityForResult()是異步的。它可以感覺與用戶同步,因爲UI將會改變,你的呼叫活動將被暫停(你的onPause()方法將被調用)。

但是您的調用活動仍然可以運行代碼;當你爲結果開始的活動完成時,你將實現一個回調被調用(這使得它非常像對話框)。

+0

我明白你在第一個陳述中的意思。在第二個語句中,我僅限於返回到'onActivityResult()'例程,還是可以返回到我離開的地方(在'startActivityForResult()'後面)?我擔心的是我有很多參數需要傳遞給被調用的Activity,然後返回到調用例程。 – Chuck

+0

而且,你能否指出我是一個「完整」的例子,而不是那些只是展示作品的人?謝謝!!! – Chuck

+0

當您的活動調用'startActivityForResult()'時,您的代碼將不會被阻止,因此您無法返回到停止的位置。我認爲你正在考慮線性編程,這實際上不是UI開發的方式......你需要考慮更多的事件驅動。一些事件('onCreate()',可能)導致你的代碼運行。您的事件處理功能將運行至完成,然後您才能收到其他事件(例如您的兒童活動的結果)。 – mah