如何在一個activity中關閉另一個activity
阿新 • • 發佈:2019-02-14
在應用程式中可能會出現在一個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)); } }); }
注:這裡用了一個XML檔案作為了UI。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(); } }); }
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(); } }