首页 > 系统 > Android > 正文

Android 全局Dialog的简单实现方法

2019-10-22 18:15:14
字体:
来源:转载
供稿:网友

前言:

这里所说的全局Dialog是指无论当前应用是处于哪一个页面上,都能够及时弹出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);‘

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表