Android 全局Dialog的簡(jiǎn)單實(shí)現(xiàn)方法
前言:
這里所說(shuō)的全局Dialog是指無(wú)論當(dāng)前應(yīng)用是處于哪一個(gè)頁(yè)面上,都能夠及時(shí)彈出Dialog來(lái)提示用戶(hù)一些信息,用戶(hù)體驗(yàn)不會(huì)很好,一般應(yīng)用于優(yōu)先級(jí)非常高的通知。
分析 :
想要實(shí)現(xiàn)無(wú)論當(dāng)前應(yīng)用是處于哪一個(gè)頁(yè)面上,都能夠及時(shí)彈出Dialog功能其實(shí)很簡(jiǎn)單,只要能獲取到當(dāng)前顯示的Activity就行了,也就是棧頂?shù)腁ctivity。
實(shí)現(xiàn)過(guò)程 : 一般項(xiàng)目中我們都會(huì)通過(guò)一個(gè)類(lèi)來(lái)管理我們的Activity,即AppManager
/**
* Activity管理類(lèi)
* @author Donkor
*/
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager(){}
/**
* 單一實(shí)例
*/
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);
}
/**
* 獲取當(dāng)前Activity(堆棧中最后一個(gè)壓入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 結(jié)束當(dāng)前Activity(堆棧中最后一個(gè)壓入的)
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
if(activity!=null){
activity.finish();
activity=null;
}
}
/**
* 結(jié)束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 結(jié)束指定類(lèi)名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 結(jié)束所有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();
}
/**
* 退出應(yīng)用程序
*/
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();
}
}
}
再封裝一個(gè)BaseActivity類(lèi)統(tǒng)一管理,給各個(gè)Activity繼承
/**
* Activity基類(lèi)
* @author Donkor
*/
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//將Activity實(shí)例添加到AppManager的堆棧
AppManager.getAppManager().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//將Activity實(shí)例從AppManager的堆棧中移除
AppManager.getAppManager().finishActivity(this);
}
}
最后需要MainActivity(主頁(yè)面、主類(lèi))或者Service中處理Dialog的顯示問(wèn)題,通過(guò)AppManager獲取到當(dāng)前棧頂?shù)腁ctivity,用于構(gòu)造Dialog就行了。
Dialog myDialog = new Dialog(AppManager.getAppManager().currentActivity(), R.style.dialog_style);‘
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android使用Dialog風(fēng)格彈出框的Activity
- Android實(shí)現(xiàn)從底部彈出的Dialog示例(一)
- Android 中從屏幕左下角彈出Dialog動(dòng)畫(huà)效果的實(shí)現(xiàn)代碼
- Android中自定義的dialog中的EditText無(wú)法彈出輸入法解決方案
- Android 仿蘋(píng)果底部彈出Dialog
- Android 從底部彈出Dialog(橫向滿(mǎn)屏)的實(shí)例代碼
- Android解決dialog彈出時(shí)無(wú)法捕捉Activity的back事件的方法
- Android自定義彈出框dialog效果
- Android 解決dialog彈出時(shí)無(wú)法捕捉Activity的back事件問(wèn)題
- Android 8.0如何完美適配全局dialog懸浮窗彈出
相關(guān)文章
Android dataBinding與ListView及事件詳解
這篇文章主要介紹了Android dataBinding與ListView及事件詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10
Android?中的監(jiān)聽(tīng)和按鍵處理詳情
這篇文章主要介紹了Android?中的監(jiān)聽(tīng)和按鍵處理詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Android.mk文件中添加第三方j(luò)ar文件的方法
這篇文章主要介紹了Android.mk文件中添加第三方j(luò)ar文件及引用第三方j(luò)ar包的方法,需要的朋友可以參考下2018-01-01

