在应用程序中可能会出现在一个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.javapublic 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(); } }