1. 程式人生 > >如何在一個activity中關閉另一個activity

如何在一個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();
 }
}
但是,靜態的終歸是不安全的,資料可能會在程式執行過程中丟失。所以也要看情況而定到底使用哪種方法。