• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
尚善若水
博客园    首页    新随笔    联系   管理    订阅  订阅

activity跳转后关闭父activity

  假如说有一个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也关掉。

  如下:

1 package com.android.intent;
2
3  import android.app.Activity;
4  import android.content.Intent;
5  import android.graphics.Color;
6  import android.os.Bundle;
7  import android.view.View;
8  import android.view.View.OnClickListener;
9  import android.widget.Button;
10
11  public class A extends Activity {
12
13 private View a;
14 private Button button;
15
16 @Override
17 public void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.a);
20 a = findViewById(R.id.a);
21 a.setBackgroundColor(Color.RED);
22
23 button = (Button) findViewById(R.id.aButton);
24 button.setOnClickListener(btonClickListener);
25 }
26
27 private OnClickListener btonClickListener = new OnClickListener() {
28
29 @Override
30 public void onClick(View view) {
31 // TODO Auto-generated method stub
32   Intent intent = new Intent();
33 intent.setClass(A.this, B.class);
34 startActivityForResult(intent, 0);
35 }
36 };
37
38 @Override
39 protected void onPause() {
40 // TODO Auto-generated method stub
41   super.onPause();
42 System.out.println("activity A onPause");
43 }
44
45 @Override
46 protected void onDestroy() {
47 // TODO Auto-generated method stub
48   super.onDestroy();
49 System.out.println("activity A onDestory");
50 }
51
52 @Override
53 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
54 // TODO Auto-generated method stub
55   if(requestCode == 0 && resultCode == RESULT_OK) {
56 finish();
57 }
58 }
59 }

A的布局文件,a.xml:

1 <?xml version="1.0" encoding="utf-8"?>
2  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:id="@+id/a">
7  <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="I am activity A!"
11 android:textSize="36sp"
12 android:gravity="center"/>
13 <Button
14 android:layout_width="match_parent"
15 android:layout_height="wrap_content"
16 android:id="@+id/aButton"
17 android:text="intent to activity B"/>
18  </LinearLayout>

同样有Activity B,和B的布局文件b.xml:

1 <?xml version="1.0" encoding="utf-8"?>
2  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:id="@+id/b">
7  <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="I am activity B"
11 android:textSize="36sp"
12 android:gravity="center"/>
13 <Button
14 android:layout_width="match_parent"
15 android:layout_height="wrap_content"
16 android:id="@+id/bButton"
17 android:text="intent to activity C"/>
18  </LinearLayout>
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();
}
}
}

还有Activity C 和它的布局文件c.xml,但它不做任何跳转,只想Activity B返回一个值,如何设置了这个返回值的话:

1 <?xml version="1.0" encoding="utf-8"?>
2  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:id="@+id/c">
7  <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="I am acitivity C"
11 android:textSize="36sp"
12 android:gravity="center"/>
13 <Button
14 android:layout_width="match_parent"
15 android:layout_height="wrap_content"
16 android:id="@+id/cButton1"
17 android:text="closeAll">
18 </Button>
19
20 <Button
21 android:layout_width="match_parent"
22 android:layout_height="wrap_content"
23 android:id="@+id/cButton2"
24 android:text="close myself"/>
25  </LinearLayout>
1 package com.android.intent;
2
3 import android.app.Activity;
4 import android.graphics.Color;
5 import android.os.Bundle;
6 import android.view.View;
7 import android.view.View.OnClickListener;
8 import android.widget.Button;
9
10 public class C extends Activity {
11
12 private View c;
13 private Button button1;
14 private Button button2;
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 // TODO Auto-generated method stub
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.c);
21 c = findViewById(R.id.c);
22 c.setBackgroundColor(Color.YELLOW);
23
24 button1 = (Button) findViewById(R.id.cButton1);
25 button1.setOnClickListener(cOnClickListener);
26
27 button2 = (Button) findViewById(R.id.cButton2);
28 button2.setOnClickListener(cOnClickListener);
29 }
30
31 @Override
32 protected void onPause() {
33 // TODO Auto-generated method stub
34 super.onPause();
35 System.out.println("activity C onPause");
36 }
37
38 @Override
39 protected void onDestroy() {
40 // TODO Auto-generated method stub
41 super.onDestroy();
42 System.out.println("activity C onDestory");
43 }
44
45 private OnClickListener cOnClickListener = new OnClickListener() {
46
47 @Override
48 public void onClick(View view) {
49 // TODO Auto-generated method stub
50 switch(view.getId()) {
51 case R.id.cButton1:
52 setResult(RESULT_OK);
53 finish();
54 break;
55
56 case R.id.cButton2:
57 finish();
58 break;
59
60 default:
61 break;
62 }
63 }
64 };
65 }

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:

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
02-22 06:06:04.848: INFO/System.out(8159): activity B onPause
02-22 06:06:06.349: INFO/System.out(8159): activity C onPause
02-22 06:06:06.879: INFO/System.out(8159): activity C onDestory
02-22 06:06:06.889: INFO/System.out(8159): activity B onDestory
02-22 06:06:06.908: INFO/System.out(8159): activity A onDestory

这只是自己学习中的笔记,留待以后参考。

代码:

TestActivityIntent.rar

posted @ 2011-02-22 14:11  尚尚是高尚的尚  阅读(17152)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3