
第十一課:處理Activity Result
本文介紹如何讀取activity回傳的result。我們已經學會用startActivty和explicit intent去開始另一個activity,也知道可以用finish去結束一個activity,回到之前的activity。但是,在很多情況下,這也是不夠的。例如,在activity A中,你想讓用戶在另一個activity B打入自己的姓名,完成後在activity A中取回姓名。在這時候可用startActivityForResult,代替本來的startActivity。
使用startActivityForResult時要跟onActivityResult一起用。你可以在activity中override onActivityResult,用來讀取回傳的資料。當activity B以finish完成後,便會call back這個function。由於程序很可能開始多個activity,因此,在呼叫startActivityForResult時,可加入一個request code,在onActivityResult可以按不同的request code做反應。
以下是activity A所需要的coding:
protected static final int REQUEST_CODE = 0;
Intent i = new Intent(); i.setClass(ReturnResultDemoActivity.this, Selection.class); startActivityForResult(i, REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case REQUEST_CODE:
if (resultCode==RESULT_OK)
{
String input = data.getStringExtra("input");
Toast.makeText(this, input, Toast.LENGTH_SHORT).show();
}
break;
}
}
以下是activity B回傳所需要的coding:
String input = txtInput.getText().toString();
Intent i = new Intent();
i.putExtra("input", input);
setResult(RESULT_OK, i);
finish();
由此看來,我們也只是用intent傳資料,按startActivtyForResult中的request code,在onActivityResult中解讀intent便可。
Download: ReturnResultDemo