转载地址: http://www.cnblogs.com/shang53880/archive/2011/02/22/1961257.html
假如说有一个activity A,在A中跳转到Activity B, 然后在B中跳转到Activity C中,最后要在C中把activity A,B,C都关掉。
当然网上说的有很多方法,其中有些方法是不安全的,我只说一种,不会对其他的代码造成影响就ok了。
首先有一个Activity A,A中有一个Button,点击这个Button会跳到Activity B中去,但会拿到一个返回值,如果返回的是RESULT_OK的话就把Activity A也关掉。
如下:
package com.android.intent;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class A extends Activity {
private View a;
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a);
a = findViewById(R.id.a);
a.setBackgroundColor(Color.RED);
button = (Button) findViewById(R.id.aButton);
button.setOnClickListener(btonClickListener);
}
private OnClickListener btonClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(A.this, B.class);
startActivityForResult(intent, 0);
}
};
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("activity A onPause");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("activity A onDestory");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(requestCode == 0 && resultCode == RESULT_OK) {
finish();
}
}
}
A的布局文件,a.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/a">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="I am activity A!"
android:textSize="36sp"
android:gravity="center"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/aButton"
android:text="intent to activity B"/>
</LinearLayout>
同样有Activity B,和B的布局文件b.xml:
package com.android.intent;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class B extends Activity {
private View b;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
b = findViewById(R.id.b);
b.setBackgroundColor(Color.GREEN);
button = (Button) findViewById(R.id.bButton);
button.setOnClickListener(bButtonOnClickListener);
}
private OnClickListener bButtonOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(B.this, C.class);
startActivityForResult(intent, 0);
}
};
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("activity B onPause");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("activity B onDestory");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(requestCode == 0 && resultCode == RESULT_OK) {
setResult(RESULT_OK);
finish();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/b">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="I am activity B"
android:textSize="36sp"
android:gravity="center"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bButton"
android:text="intent to activity C"/>
</LinearLayout>
还有Activity C 和它的布局文件c.xml,但它不做任何跳转,只想Activity B返回一个值,如何设置了这个返回值的话
package com.android.intent;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class C extends Activity {
private View c;
private Button button1;
private Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.c);
c = findViewById(R.id.c);
c.setBackgroundColor(Color.YELLOW);
button1 = (Button) findViewById(R.id.cButton1);
button1.setOnClickListener(cOnClickListener);
button2 = (Button) findViewById(R.id.cButton2);
button2.setOnClickListener(cOnClickListener);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("activity C onPause");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("activity C onDestory");
}
private OnClickListener cOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
switch(view.getId()) {
case R.id.cButton1:
setResult(RESULT_OK);
finish();
break;
case R.id.cButton2:
finish();
break;
default:
break;
}
}
};
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/c">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="I am acitivity C"
android:textSize="36sp"
android:gravity="center"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cButton1"
android:text="closeAll">
</Button>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cButton2"
android:text="close myself"/>
</LinearLayout>
Activity C中有2个Button,一个是关闭自己,另一个是关闭所有的Activity。
关闭自己很简单,直接finish()就ok了。
关闭所有的就需要先设置一个返回值,然后关闭自己(注意一点要先设置返回值),这是先走Activity C的onPause(),然后走Activity C的onDestory(),完了之后就会将返回值传给Activity B。
在Activity B的OnActivityResult(int requestCode, int resultCode, Intent data)中就会对传回来的参数进行判断,如果是RESULT_OK 就先设置Activity A的返回值,然后finish()自己就ok了,这是先走Activity B的onPause(),然后走Activity B的onDestory(),完了之后就会将返回值传给Activity A。
在Activity A的OnActivityResult(int requestCode, int resultCode, Intent data)中就会对传回来的参数进行判断,如果是RESULT_OK finish()自己就ok了,这是先走Activity A的onPause(),然后走ActivityA 的onDestory(),完了之后就会将返回值传给Activity A。
点击Activity C上的关闭自己出现的log:
02-22 06:04:22.107: INFO/System.out(8159): activity A onPause
02-22 06:04:23.839: INFO/System.out(8159): activity B onPause
02-22 06:04:25.598: INFO/System.out(8159): activity C onPause
02-22 06:04:25.879: INFO/System.out(8159): activity C onDestory
然后点击Activity B上的Button,然后在点击Activity C上的关闭所有出现的log:
-22 06:04:22.107: INFO/System.out(8159): activity A onPause
-22 06:04:23.839: INFO/System.out(8159): activity B onPause
-22 06:04:25.598: INFO/System.out(8159): activity C onPause
-22 06:04:25.879: INFO/System.out(8159): activity C onDestory
-22 06:06:04.848: INFO/System.out(8159): activity B onPause
-22 06:06:06.349: INFO/System.out(8159): activity C onPause
-22 06:06:06.879: INFO/System.out(8159): activity C onDestory
-22 06:06:06.889: INFO/System.out(8159): activity B onDestory
-22 06:06:06.908: INFO/System.out(8159): activity A onDestory
源代码: http://download.csdn.net/detail/mnorst/5293040