软件编程
位置:首页>> 软件编程>> Android编程>> Android 全局Dialog的简单实现方法

Android 全局Dialog的简单实现方法

作者:Donkor-  发布时间:2021-06-28 10:14:40 

标签:Android,全局,Dialog

前言:

这里所说的全局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);‘

来源:http://blog.csdn.net/donkor_/article/details/79303976

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com