Activity1跳轉到Activity2,用startActivity();如果由Activity1跳轉到Activity2,需要再由Activity2回到Activity1呢?
可能有人說:那我在Activity2中再次使用startActivity()不就可以了,是的,但是startActivityForResult()能夠直接完成這項工作
Activity startActivityForResult(Intent intent,int requestCode)步驟:---requestCode--0--用此來做個標記,要求大於等於0
1)在源Activity中使用startActivityForResult()方法啓動目標Activity
2)在目標Activity中使用setResult()方法設置返回值,並調用finish()方法結束目標Activity
3)在源Activity中重寫onActivityResult()方法,獲得從目標Activity中返回的值
源Activity代碼:
public class MainActivity extends Activity {
private Button button;
private void setupView() {
button = (Button) findViewById(R.id.button);
button.setText("啓動TargetActivity");
}
public void doClick(View v){
//啓動目標Activity
Intent intent = new Intent(this,TargetActivity.class);
intent.putExtra("name", "zhangsan");
// startActivity(intent);
startActivityForResult(intent, 0);
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupView();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
// super.onActivityResult(requestCode, resultCode, data);
switch (resultCode) {
case RESULT_CANCELED:
Toast.makeText(this, "未正確返回結果.", Toast.LENGTH_LONG).show();
break;
case RESULT_OK:
int age = data.getIntExtra("age", -1);
if(age!=-1){
Toast.makeText(this, "返回的年齡是:" + age, Toast.LENGTH_LONG).show();
}
break;
}
}
}
目標Activity代碼:
public class TargetActivity extends Activity {
private Button button;
private String name;
private void setupView(){
button = (Button)findViewById(R.id.button);
button.setText("返回");
}
public void doClick(View v){
//判斷姓名,根據姓名獲取對應的年齡
int age = -1;
if("zhangsan".equals(name)){
age = 19;
}else if("lisi".equals(name)){
age = 20;
}else if("wangwu".equals(name)){
age = 30;
}else{
age = 18;
}
//創建intent對象,設置年齡爲附加參數
Intent intent = new Intent();
intent.putExtra("age", age);
//設置返回值,將intent對象作爲數據返回到源Activity
setResult(RESULT_OK, intent);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupView();//初始化界面
//獲取源Activity傳遞過來的姓名信息
name = getIntent().getStringExtra("name");
//如果未正確獲得姓名,則返回RESULT_CALCELED
if(name==null){
setResult(RESULT_CANCELED);
finish();
}
}
}