如何在一个activity中关闭另一个activity

在应用程序中可能会出现在一个activity中去关闭其他的activity,起初,我使用startActivitForResult这个方法,在需要关闭的activity的OnActivityResult方法中进行finish。确实是一种方法,但是有条件:比如你的这几个activity必须有关联(一个启动另一个),而且有些不方便。
这里有另外两种方法:
1、使用静态变量
在需要可能会被关闭的activity中添加一个activity的静态变量,保存该activity,然后在另外一个activity中获取这个静态变量,进行相关操作。
示例如下:
这个是MainActivity:
public class MainActivity extends Activity {
 <span style="color:#FF0000;">public static Activity mMainActivity = null</span>; //保存这个activiy
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mMainActivity = this;
  Button startUp = (Button) findViewById(R.id.btn);
  startUp.setText("启动另一个activity");
  startUp.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    MainActivity.this.startActivity(new Intent(MainActivity.this, AnotherActivity.class));
   }
  });
 }
这是另一个:
public class AnotherActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  Button finishPreActivity = (Button) findViewById(R.id.btn);
  finishPreActivity.setText("关闭另一个activity");
  finishPreActivity.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
   MainActivity.mMainActivity.finish();//关键代码
    AnotherActivity.this.finish();
   }
  });
 }
注:这里用了一个XML文件作为了UI。
2、创建管理activity的类
可以创建一个管理activity的类,在每一个activity中进行相应的处理。管理类如下:
public class ActivityManager {
 private static List<Activity> list = new ArrayList<Activity>();
 public static void OnCreateActivity(Activity activity) {
  for (Activity a : list) {
   if (a.equals(list)) {
    return;
   }
  }
  list.add(activity);
 }
 public static void OnDestroyActivity(Activity activity) {
  list.remove(activity);
 }
 public static List<Activity> GetActivityList() {
  return list;
 }
}

MainActivity.java
public class MainActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ActivityManager.OnCreateActivity(MainActivity.this); //添加到ActivityManager中
  Button startUp = (Button) findViewById(R.id.btn);
  startUp.setText("启动另一个activity");
  startUp.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    MainActivity.this.startActivity(new Intent(MainActivity.this, AnotherActivity.class));
   }
  });
 }
 @Override
 protected void onDestroy() {
  ActivityManager.OnDestroyActivity(MainActivity.this); //从ActivityManager中移除
  super.onDestroy();
 }

另一个activity:
public class AnotherActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ActivityManager.OnCreateActivity(AnotherActivity.this);
  Button finishPreActivity = (Button) findViewById(R.id.btn);
  finishPreActivity.setText("关闭另一个activity");
  finishPreActivity.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    List<Activity> list = ActivityManager.GetActivityList();
    for (int position = 0; position < list.size(); position++) {
     list.get(position).finish();
    }//关闭了其余所有的activity
    AnotherActivity.this.finish();
   }
  });
 }
 @Override
 protected void onDestroy() {
  ActivityManager.OnDestroyActivity(AnotherActivity.this);
  super.onDestroy();
 }
}
但是,静态的终归是不安全的,数据可能会在程序运行过程中丢失。所以也要看情况而定到底使用哪种方法。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值