多个Activity跳转的小结

本文通过三个示例详细介绍了在Android开发中Activity之间的跳转方式,包括数据传递和回调机制。从简单的Main->SecondActivity->Main跳转到更复杂的Main->SecondActivity->ThirdActivity->Main和Main->SecondActivity->ThirdActivity->SecondActivity->Main,每个示例都展示了不同的跳转逻辑和返回参数处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[color=red]转载请注明出处[/color]

在android开发中Activity相当于web开发的页面,或者说如j2ee开发中对应的jsp页面。在开发jsp时,经常会遇到页面跳转的问题,在android也同样会遇到。以下的几个例子是我对android的Activity跳转的小结,也是最近做项目的小结。

[size=large][color=red]第一个例子:demo1[/color][/size]
Main—>SecondActivity—>Main
从流程上看就是从Main跳转到SecondActivity,再从SecondActivity返回到Main。也就是将子Activity的数据返回给父Activity。
代码如下:
public class Main extends Activity {

private Button btn;
private TextView request_text;
private final int FIRST_REQUEST_CODE = 1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

request_text = (TextView)this.findViewById(R.id.request_text);

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Main.this,SecondActivity.class);
i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
startActivityForResult(i, FIRST_REQUEST_CODE);
}
});
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_OK){
if(data != null) {
request_text.setText(data.getStringExtra("request"));
}
}
}
}


public class SecondActivity extends Activity{

private TextView request_text;
private Button btn;
private String text;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);

request_text = (TextView)this.findViewById(R.id.request_text);

if (getIntent().getStringExtra("request_text_for_main") != null) {
text = getIntent().getStringExtra("request_text_for_main");
request_text.setText(text);
}

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("request",text+"\n"+"从SecondActivity传递到ThirdActivity");
setResult(Activity.RESULT_OK,i);
finish();
}
});
}
}



[img]http://dl.iteye.com/upload/attachment/332373/82b9aa9c-3029-3043-8884-a67caab7eeaa.png[/img]
图一

图一所示是demo初始化的样子,点击“第一次跳转”进入图二。

[img]http://dl.iteye.com/upload/attachment/332375/2d5dfb6a-d9ba-3891-8c53-fe7a1a2780ce.png[/img]
图二
图二显示从Main到SecondActivity这个过程,再点击“第二次跳转”即返回Main这个Activity。

[img]http://dl.iteye.com/upload/attachment/332377/eee750b1-cdb0-3423-8ce3-2e8554e1866f.png[/img]
图三
图三表示跳转结束,Button按钮上面的文字记录跳转的过程。

这个例子最主要是第一个Activity Main设置的onActivityResult()方法和startActivityForResult()方法。
在Main中通过startActivityForResult()调用SecondActivity,然后在onActivityResult()中获取其返回参数,或者说通过onActivityResult()进行回调。

SecondActivity中要返回第一个Main必须:
setResult(Activity.RESULT_OK,i);
finish();


[size=large][color=red]第二个例子:demo2[/color][/size]
Main—>SecondActivity—>ThirdActivity—>Main
这个例子的流程,比上一个更复杂一些,经历了3个Activity,最好跳转回第一个Activity。
代码如下:
public class Main extends Activity {

private Button btn;
private TextView request_text;
private final int FIRST_REQUEST_CODE = 1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

request_text = (TextView)this.findViewById(R.id.request_text);

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Main.this,SecondActivity.class);
i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
startActivityForResult(i, FIRST_REQUEST_CODE);
}
});
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){
if(data != null) {
request_text.setText(data.getStringExtra("request_text_for_third"));
}
}
}
}


public class SecondActivity extends Activity{

private TextView request_text;
private Button btn;
private final int SECOND_REQUEST_CODE = 2;
private String text;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);

request_text = (TextView)this.findViewById(R.id.request_text);

if (getIntent().getStringExtra("request_text_for_main") != null) {
text = getIntent().getStringExtra("request_text_for_main");
request_text.setText(text);
}

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(SecondActivity.this,ThirdActivity.class);
i.putExtra("request_text_for_second", text+"\n"+"从SecondActivity传递到ThirdActivity");
startActivityForResult(i, SECOND_REQUEST_CODE);
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==SECOND_REQUEST_CODE && data != null){
setResult(Activity.RESULT_FIRST_USER, data);
finish();
}
}
}



public class ThirdActivity extends Activity{

private TextView request_text;
private Button btn;
private String text;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.third);

text = getIntent().getStringExtra("request_text_for_second");
request_text = (TextView)this.findViewById(R.id.request_text);
request_text.setText(text);

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("request_text_for_third", text+"\n"+"从ThirdActivity再次传递到Main");
setResult(Activity.RESULT_FIRST_USER, i);
finish();
}
});
}

}


[img]http://dl.iteye.com/upload/attachment/332379/ce07e12d-7752-3bd3-82d9-2bdaf14e2f41.png[/img]

[img]http://dl.iteye.com/upload/attachment/332381/49a5bfeb-aac7-3ee7-872d-b67a994c7845.png[/img]

[img]http://dl.iteye.com/upload/attachment/332383/d0d42e31-3956-31dc-a4f2-3bae44f558cf.png[/img]

[img]http://dl.iteye.com/upload/attachment/332385/a23d3449-2022-3328-a79b-f564ff6e52f2.png[/img]

这个demo2比起前面的demo1的不同之处在于就是通过ThirdActivity进行跳转到Main。
在代码上的区别是:
(1)Main的onActivityResult()方法中,它的resultCode==Activity.RESULT_FIRST_USER而不是前面的resultCode==Activity.RESULT_OK
(2)SecondActivity中增加了onActivityResult()方法,该方法是用于回调ThirdActivity,并且该方法执行了跳转过程跳转到Main这个Activity。
(3) ThirdActivity和demo1的SecondActivity很类似。


[size=large][color=red]第三个例子:demo3[/color][/size]
Main—>SecondActivity—>ThirdActivity—>SecondActivity—>Main
这个过程看起来复杂,其实不然,最后一步是借助SecondActivity的另一个Button实现的。
代码如下:
public class Main extends Activity {
private Button btn;
private TextView request_text;
private final int FIRST_REQUEST_CODE = 1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

request_text = (TextView)this.findViewById(R.id.request_text);

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Main.this,SecondActivity.class);
i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
startActivityForResult(i, FIRST_REQUEST_CODE);
}
});
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){
if(data != null) {
request_text.setText(data.getStringExtra("final_request"));
}
}
}
}


public class SecondActivity extends Activity{

private TextView request_text;
private Button btn,finalBtn;
private final int SECOND_REQUEST_CODE = 2;
private String text;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);

request_text = (TextView)this.findViewById(R.id.request_text);

if (getIntent().getStringExtra("request_text_for_main") != null) {
text = getIntent().getStringExtra("request_text_for_main");
request_text.setText(text);
}

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(SecondActivity.this,ThirdActivity.class);
i.putExtra("request_text_for_second", text+"\n"+"从SecondActivity传递到ThirdActivity");
startActivityForResult(i, SECOND_REQUEST_CODE);
}
});

finalBtn = (Button)this.findViewById(R.id.finalBtn);
finalBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("final_request", text+"\n"+"从SecondActivity最后传递到Main");
setResult(Activity.RESULT_FIRST_USER,i);
finish();
}
});
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==SECOND_REQUEST_CODE && resultCode==Activity.RESULT_OK){
if(data != null) {
text = data.getStringExtra("request_text_for_third");
request_text.setText(text);
}
}
}
}


public class ThirdActivity extends Activity{

private TextView request_text;
private Button btn;
private String text;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.third);

text = getIntent().getStringExtra("request_text_for_second");
request_text = (TextView)this.findViewById(R.id.request_text);
request_text.setText(text);

btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("request_text_for_third", text+"\n"+"从ThirdActivity再次传递到SecondActivity");
setResult(Activity.RESULT_OK, i);
finish();
}
});
}
}


[img]http://dl.iteye.com/upload/attachment/332387/213d9f40-f70f-342c-84e4-b641d64cc360.png[/img]

[img]http://dl.iteye.com/upload/attachment/332389/381db0ca-6e05-3cb9-8c12-dd7c501cda65.png[/img]

[img]http://dl.iteye.com/upload/attachment/332391/34b7f690-5aee-3aed-b109-f0021b84a45d.png[/img]

[img]http://dl.iteye.com/upload/attachment/332393/42a7da69-fcbd-309a-a798-f1e5a6dc0912.png[/img]

[img]http://dl.iteye.com/upload/attachment/332395/14ec6785-8c22-3bdf-89a2-5d608d13099b.png[/img]


比起前一个demo2其实没有更复杂之处,只是从ThirdActivity跳转回SecondActivity,而通过SecondActivity的另一个Button来跳转回Main的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值