Android Activity Navigate Helper

This Navigator class helps to easily navigate from one activity to another including passing parameters. It also  dose the navigate back to a previous activity as well. With the use of the HashMap object you can pass serializable objects to other activities.

public class Navigator {

	// navigate form one activity to another with passing parameters
	public static void Navigate(Activity activityFrom, Class classTo,
			HashMap<String, Serializable> params) {

		Controller.instance().PrevActStack()
				.push(activityFrom.getClass().getName());

		Intent intentNavigateTo = new Intent(activityFrom, classTo);
		intentNavigateTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

		Set set = params.entrySet();
		Iterator iterator = set.iterator();

		while (iterator.hasNext()) {

			Map.Entry me = (Map.Entry) iterator.next();
			intentNavigateTo.putExtra((String) me.getKey(),
					(Serializable) me.getValue());
		}

		activityFrom.startActivityForResult(intentNavigateTo, 0);
		activityFrom.finish();
		params.clear();

	}

	// navigate form one activity to another without passing parameters
	public static void Navigate(Activity activityFrom, Class classTo) {

		Controller.instance().PrevActStack()
				.push(activityFrom.getClass().getName());
		Intent intentNavigateTo = new Intent(activityFrom, classTo);
		intentNavigateTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		activityFrom.startActivity(intentNavigateTo);
		activityFrom.finish();
	}

	// navigate back to previous activity with passing parameters
	public static void NavigateBack(Activity activityFrom,
			HashMap<String, Serializable> params) throws Exception {

		if (Controller.instance().PrevActStack().size() == 0) {
			throw new Exception("No previous activity found !!");
		}

		Intent intentNavigateBackTo = new Intent(activityFrom,
				Class.forName(Controller.instance().PrevActStack().pop()));

		intentNavigateBackTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Set set = params.entrySet();
		Iterator iterator = set.iterator();

		while (iterator.hasNext()) {

			Map.Entry me = (Map.Entry) iterator.next();
			intentNavigateBackTo.putExtra((String) me.getKey(),
					(Serializable) me.getValue());
		}

		activityFrom.startActivity(intentNavigateBackTo);
		activityFrom.finish();
		params.clear();

	}

	// navigate back to previous activity without passing parameters
	public static void NavigateBack(Activity activityFrom) throws Exception {

		if (Controller.instance().PrevActStack().size() == 0) {
			throw new Exception("No previous activity found !!");
		}

		Intent intentNavigateBackTo = new Intent(activityFrom,
				Class.forName(Controller.instance().PrevActStack().pop()));
		intentNavigateBackTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		activityFrom.startActivity(intentNavigateBackTo);
		activityFrom.finish();
	}

}

Implementation of the Controller.

public class Controller {

	private static Controller controllerField;
	private Stack<String> activityNameStack;

	private Controller() {
	}

	public static Controller instance() {
		if (controllerField == null) {
			controllerField = new Controller();
		}
		return controllerField;
	}
	
	public Stack<String> PrevActStack(){
		if (activityNameStack == null) {
			activityNameStack = new Stack<String>();
		}
		return activityNameStack;
	}
	
}