Android中 如何在本Activity页面退出后回到首页或者指定的Activity入口

简介: Android中 如何在本Activity页面退出后回到首页或者指定的Activity入口

(注:代码中有一个自定义的TextView大家可忽略直接理解为普通的TextView即可,我给出下载的示例中没有优化精简,最主要的还是解决问题的思想,若有不明白的地方可给我留言,我看到后会给予具体回复。。)


1.问题:


如何在本Activity页面退出后回到首页或者指定的Activity入口。假如你在D页面,想退出当前activity时回到最初的首页入口A页面,中间有B、C两个页面。


2.思路:


退出本页面finish即可。将首页置于任务栈栈顶,将其他的activity清除出栈;自定义工具类AppManager;在结束的activity页面的功能代码中加入代码:


AppManager.getAppManager().finishActivity(C.class);


AppManager.getAppManager().finishActivity (B.class);


finish();


需要特别注意的是,1)此代码必须在finish()方法之前执行。并且从A到D的页面中一定要按页面的顺序清除出栈,否则会报并发修改异常:java.util.ConcurrentModificationException(此异常将在下一篇作简单分析)


2)在当前页面与返回的指定页面中间经过的所有的activity中,都必须初始化这样一句代码:AppManager.getAppManager().addActivity(this);


3.示例主要代码:


本示例的详细代码地址:http://download.csdn.net/detail/sun_2134/8437943


页面返回指定Activity的类:(布局文件没有给出,就是两个简单的TextView也可以写成按钮)

/**
 * @author 诺诺
 * 
 */
public class EActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AppManager.getAppManager().addActivity(this);
    TextView tv = (TextView) findViewById(R.id.tv);
    tv.setText("返回首页");
    tv.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        AppManager.getAppManager().finishActivity(DActivity.class);
        AppManager.getAppManager().finishActivity(CActivity.class);
        AppManager.getAppManager().finishActivity(BActivity.class);
        finish();
      }
    });
  }
}

工具类:(项目中都会用的到)

package com.example.cese;
import java.util.Stack;
import android.app.Activity;
import android.content.Context;
/**
 * @author 诺诺 应用程序Activity管理类:用于Activity管理和应用程序退出
 * 
 */
public class AppManager {
  private static Stack<Activity> activityStack;
  private static AppManager instance;
  private AppManager() {
  }
  /**
   * 单一实例
   */
  public static AppManager getAppManager() {
    if (instance == null) {
      instance = new AppManager();
    }
    return instance;
  }
  /**
   * 添加Activity到堆栈
   */
  public void addActivity(Activity activity) {
    if (activityStack == null) {
      activityStack = new Stack<Activity>();
    }
    activityStack.add(activity);
  }
  /**
   * 获取当前Activity(堆栈中最后一个压入的)
   */
  public Activity currentActivity() {
    Activity activity = activityStack.lastElement();
    return activity;
  }
  /**
   * 结束当前Activity(堆栈中最后一个压入的)
   */
  public void finishActivity() {
    Activity activity = activityStack.lastElement();
    finishActivity(activity);
  }
  /**
   * 结束指定的Activity
   */
  public void finishActivity(Activity activity) {
    if (activity != null) {
      activityStack.remove(activity);
      activity.finish();
      activity = null;
    }
  }
  /**
   * 结束指定类名的Activity
   */
  public void finishActivity(Class<?> cls) {
    for (Activity activity : activityStack) {
      if (activity.getClass().equals(cls)) {
        finishActivity(activity);
      }
    }
  }
  /**
   * 结束所有Activity
   */
  public void finishAllActivity() {
    for (int i = 0, size = activityStack.size(); i < size; i++) {
      if (null != activityStack.get(i)) {
        activityStack.get(i).finish();
      }
    }
    activityStack.clear();
  }
  /**
   * 退出应用程序
   */
  public void AppExit(Context context) {
    try {
      finishAllActivity();
      System.exit(0);
      android.os.Process.killProcess(android.os.Process.myPid());
    } catch (Exception e) {
    }
  }
  /**
   * 结束指定的Activity
   */
  public void getActivity(Activity activity) {
    if (activity != null) {
      activityStack.remove(activity);
      activity.finish();
      activity = null;
    }
  }
  /**
   * 得到指定类名的Activity
   */
  public Activity getActivity(Class<?> cls) {
    for (Activity activity : activityStack) {
      if (activity.getClass().equals(cls)) {
        return activity;
      }
    }
    return null;
  }
}


目录
相关文章
|
3月前
|
Android开发 开发者
Android UI设计: 请解释Activity的Theme是什么,如何更改应用程序的主题?
Android UI设计: 请解释Activity的Theme是什么,如何更改应用程序的主题?
42 1
|
3月前
|
数据库 Android开发 开发者
Android基础知识:请解释Activity的生命周期。
Android基础知识:请解释Activity的生命周期。
43 2
|
4月前
|
Android开发
UniApp Android 页面拖动,去掉半圆形阴影
UniApp Android 页面拖动,去掉半圆形阴影
45 0
|
2月前
|
Android开发
[Android 四大组件] --- Activity
[Android 四大组件] --- Activity
22 1
|
3月前
|
Android开发
Android基础知识:什么是Fragment?与Activity的区别是什么?
Android基础知识:什么是Fragment?与Activity的区别是什么?
287 54
|
4月前
|
XML Java Android开发
Android Studio App开发之实现简单的启动引导页ViewPager(附源码 实现App的欢迎页面)
Android Studio App开发之实现简单的启动引导页ViewPager(附源码 实现App的欢迎页面)
83 1
|
4月前
|
XML 安全 Java
Android Studio App开发入门之活动Activity中为活动补充附加信息讲解及实战(附源码 超详细必看)
Android Studio App开发入门之活动Activity中为活动补充附加信息讲解及实战(附源码 超详细必看)
36 0
|
4月前
|
Android开发
Android Studio App开发入门之在活动之间传递消息(附源码 超详细必看)(包括显示和隐式Intent,向上一个和下一个Activity发送数据)
Android Studio App开发入门之在活动之间传递消息(附源码 超详细必看)(包括显示和隐式Intent,向上一个和下一个Activity发送数据)
45 0
|
4月前
|
Android开发
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
41 0
|
4月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)