大家都知道Activity間的跳轉可以使用startActivity(),然後傳入1個Intent,指定元件即可,然後跳轉的那個Activity要傳回時,需要再使用一次startActivity(),如果需要傳遞資料回來,肯定需要用Intent,但是不斷地調用startActivity(),每次跳轉系統都會在task中生成一個新的Activity執行個體,并且放于棧結構的頂部,當我按下後退鍵時,才能看到原來的Activity執行個體。當然這是在standard啟動模式,不管有沒有已存在的執行個體,都生成新的執行個體。
是以要使用finish()來傳回,但是如果我不使用startActivity()也就是不能傳入Intent時,我們該怎麼把Intent也就是資料傳遞回去呢?
假設有2個Activity A和B,這時候Activity A就該使用startActivityForResult()了,使用startActivityForResult()的同時必須使用onActivityResult(),顧名思義,就是得到Activity B傳回的結果,也就是通過Intent攜帶的資料,Intent簡直是往返兩地的高鐵啊,呵呵。
怎麼使用startActivityForResult()呢,startActivityForResult()需要一個int類型的請求碼,這個請求碼會随着Activity A的跳轉而帶過去,而跳轉過去的Activity B finish()的時候,我們需要使用setResult()來設定一個結果碼,這個結果碼必須為RESULT_OK,因為Activity A的onActivityResult()會依次判斷結果碼和請求碼,隻有都符合的時候,OK,我們可以從onActivityResult()的參數Intent data中擷取資料啦,這個data就是Activity B中的Intent。
下面是Demo,先看Activity A:
/**
* 主界面
*
* @author yuzhentao
*/
public class MainActivity extends Activity {
private static final int REQUEST_CODE = 1;
private Context context;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
initView();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {//如果結果碼等于RESULT_OK
if (requestCode == REQUEST_CODE) {
String result = data.getExtras().getString("result");
tv.setText(result);
}
}
}
private void initView() {
tv = (TextView) findViewById(R.id.textview_activity_main);
findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(context, DemoActivity.class), REQUEST_CODE);//帶上requestCode跳轉
}
});
}
}
下面是Activity B:
/**
* DemoActivity
*
* @author yuzhentao
*/
public class DemoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
initView();
}
private void initView() {
findViewById(R.id.button_activity_demo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("result", "你好,我是傳回的資料");
setResult(RESULT_OK, intent);//設定resultCode
finish();
}
});
}
}
最後是效果圖:
Demo位址:http://download.csdn.net/detail/qq_23940659/9467070