Android實(shí)現(xiàn)Dialog隊(duì)列
本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處姜挺。歡迎關(guān)注我的 簡(jiǎn)書(shū)谷羞。
安利一波我寫(xiě)的開(kāi)發(fā)框架:MyScFrame喜歡的話(huà)就給個(gè)Star
場(chǎng)景
現(xiàn)在的App上都有很多彈窗俗批,什么廣告彈窗咧党,禮券彈窗秘蛔,任務(wù)彈窗等等。而大部分的彈窗都是在進(jìn)首頁(yè)的時(shí)候就要呈現(xiàn)給用戶(hù)看的傍衡。這個(gè)時(shí)候我們?nèi)绾稳ス芾磉@些彈窗深员?我首先想到的是使用ArrayList
,但是發(fā)現(xiàn)LinkedList
在這里更加適用蛙埂,至于為什么辨液,大家可以自行百度一下,這邊就不做累述了箱残。因?yàn)檫@只是個(gè)小功能因此,這邊沒(méi)有牽扯到太多的理論知識(shí),我這邊就直接上代碼被辑。
DialogQueueUtils
public class DialogQueueUtils {
private static final String TAG = "DialogQueueUtils";
private MyQueue mMyQueue;
private Dialog mCurrentDialog = null;//當(dāng)前顯示的Dialog
private DialogQueueUtils() {
mMyQueue = new MyQueue();
}
public static DialogQueueUtils getInstance() {
return DialogQueueHolder.singleton;
}
/**
* 單例模式->靜態(tài)內(nèi)部類(lèi)<br/>
* 多線(xiàn)程情況下燎悍,使用合理一些,推薦
*/
static class DialogQueueHolder {
private static DialogQueueUtils singleton = new DialogQueueUtils();
}
public void addDialog(List<Dialog> dialogs){
for (Dialog dialog : dialogs) {
if (dialog != null){
mMyQueue.offer(dialog);
}
}
}
public void addDialog(Dialog dialog){
if (dialog != null){
mMyQueue.offer(dialog);
}
}
public void show(){
if (mCurrentDialog == null){
//從隊(duì)列中拿出一個(gè)Dialog實(shí)例,并從列表中移除
mCurrentDialog = mMyQueue.poll();
//當(dāng)隊(duì)列為空的時(shí)候拿出來(lái)的會(huì)是null
if (mCurrentDialog != null){
mCurrentDialog.show();
mCurrentDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
//這邊設(shè)置了dismiss監(jiān)聽(tīng),在監(jiān)聽(tīng)回調(diào)中再次調(diào)用show方法,可以獲取下一個(gè)彈窗
mCurrentDialog = null;
show();
}
});
}
}
}
}
MyQueue
這個(gè)其實(shí)可有可無(wú),創(chuàng)建它只是想說(shuō)后續(xù)可能需要擴(kuò)展
public class MyQueue {
private Queue<Dialog> mDialogQueue = new LinkedList<>();
/**
* 進(jìn)隊(duì)
*
* @param dialog
*/
public void offer(Dialog dialog) {
mDialogQueue.offer(dialog);
}
/**
* 出隊(duì)
*
* @return
*/
public Dialog poll() {
return mDialogQueue.poll();
}
}
代碼非常的簡(jiǎn)單思路也是比較清晰明了的盼理,我這邊只是提供一個(gè)思路谈山,或許大家有更好的實(shí)現(xiàn)方式,可以留言給我宏怔。
歡迎大家留言指出我的不足奏路。