温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android 中怎么实现全局一个Dialog

发布时间:2021-06-27 18:31:37 来源:亿速云 阅读:773 作者:Leah 栏目:移动开发

Android 中怎么实现全局一个Dialog,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

分析 :

想要实现无论当前应用是处于哪一个页面上,都能够及时弹出Dialog功能其实很简单,只要能获取到当前显示的Activity就行了,也就是栈顶的Activity。

实现过程 : 一般项目中我们都会通过一个类来管理我们的Activity,即AppManager

/**
 * Activity管理类
 * @author Donkor
 */
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();
    if(activity!=null){
      activity.finish();
      activity=null;
    }
  }
  /**
   * 结束指定的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();
      ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
      activityMgr.restartPackage(context.getPackageName());
      System.exit(0);
    } catch (Exception e) { 
      e.printStackTrace();
    }
  }
}

再封装一个BaseActivity类统一管理,给各个Activity继承

/**
 * Activity基类
 * @author Donkor
 */
public abstract class BaseActivity extends AppCompatActivity {

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //将Activity实例添加到AppManager的堆栈
    AppManager.getAppManager().addActivity(this);
  }


  @Override
  protected void onDestroy() {
    super.onDestroy();
    //将Activity实例从AppManager的堆栈中移除
    AppManager.getAppManager().finishActivity(this);
  }

}

最后需要MainActivity(主页面、主类)或者Service中处理Dialog的显示问题,通过AppManager获取到当前栈顶的Activity,用于构造Dialog就行了。

Dialog myDialog = new Dialog(AppManager.getAppManager().currentActivity(), R.style.dialog_style);‘

看完上述内容,你们掌握Android 中怎么实现全局一个Dialog的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI