程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 打開多個Activity後,任意關閉其中幾個、後面幾個或者前面幾個的解決辦法

打開多個Activity後,任意關閉其中幾個、後面幾個或者前面幾個的解決辦法

編輯:關於C++

先說一個實際的場景,比如一個購物的App。用戶進來先去浏覽商品,選好了。打算付款,這個時候停留在Activity1.java。這個時候提示沒有登錄,就會跳轉到登錄頁面Activity2.java。用戶發現自己還沒有賬號。點擊登錄旁邊的注冊按鈕就跳轉到Activity3.java。注冊之後,再登錄,登錄之後發現沒錢,就跳轉到充值界面Activity4.java。最後充值成功,關閉之前所有界面只留下付款頁面,也就是Activity1.java。

在這個過程中。用戶隨時可以點擊返回,也要一步一步返回回去,比如在注冊的時候不想注冊,點擊返回還要退到登錄界面。所以你還不能在跳到注冊的是把登錄的Activity finish掉。


這一系列的流程跳轉怎麼來處理了。開始我也頭痛,後來想到一個辦法。


思路如下:我們可以定義一個緩存池,把之前所有打開的Activity頁面作為對象都放進去,到最後清空一下這個緩存就行了。

代碼如下:

public class CacheActivity {
	public static List activityList = new LinkedList();

	public CacheActivity() {

	}

	/**
	 * 添加到Activity容器中
	 */
	public static void addActivity(Activity activity) {
		if (!activityList.contains(activity)) {
			activityList.add(activity);
		}
	}

	/**
	 * 便利所有Activigty並finish
	 */
	public static void finishActivity() {
		for (Activity activity : activityList) {
			activity.finish();
		}
	}

	/**
	 * 結束指定的Activity
	 */
	public static void finishSingleActivity(Activity activity) {
		if (activity != null) {
			if (activityList.contains(activity)) {
				activityList.remove(activity);
			}
			activity.finish();
			activity = null;
		}
	}

	/**
	 * 結束指定類名的Activity 在遍歷一個列表的時候不能執行刪除操作,所有我們先記住要刪除的對象,遍歷之後才去刪除。
	 */
	public static void finishSingleActivityByClass(Class cls) {
		Activity tempActivity = null;
		for (Activity activity : activityList) {
			if (activity.getClass().equals(cls)) {
				tempActivity = activity;
			}
		}

		finishSingleActivity(tempActivity);
	}

}


我們在每個Activity中,都在onCreate方法中加入如下代碼:比如在Activity1.java中的onCreate
if (!CacheActivity.activityList.contains(Activity1.this)) {
CacheActivity.addActivity(Activity1.this);
}


意味著將他們加入到我們控制池裡面去了,然後從付款跳轉到登陸,登陸跳到注冊,注冊跳到充值,都不要finish當前的Activity,這樣點擊返回就會按照流程返回了。最後我們在充值成功的時候,調用
CacheActivity.finishSingleActivityByClass(Activity2.class);
CacheActivity.finishSingleActivityByClass(Activity3.class);
CacheActivity.finishSingleActivityByClass(Activity4.class);


這樣就會關閉後面三個Activity,第一個Activity也就是Activity1就出出來。


我們也可以不把付款的頁面加入進去,只把後面三個加入進去,然後調用


CacheActivity.finishActivity();


全部清空,第一個頁面也就出來了。;

大概思路和做法就是這樣。不知道大家聽明白沒?


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved