国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > 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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴林左旗| 鹿邑县| 大庆市| 巴青县| 四川省| 东至县| 偃师市| 洪江市| 锦屏县| 镇安县| 松潘县| 唐山市| 平原县| 松潘县| 方山县| 平果县| 天等县| 夏河县| 雅江县| 兴城市| 任丘市| 林芝县| 禹城市| 宁都县| 韩城市| 溧阳市| 台北市| 达州市| 曲周县| 渑池县| 垫江县| 阿拉善右旗| 宁河县| 南京市| 太仆寺旗| 高阳县| 武冈市| 兴隆县| 鄢陵县| 黔江区| 普定县|