2013年2月23日 星期六

[演算法]判斷alertdialog是否打開並更新資料

簡單的需求如題
但實際上的需求是 若是打開的話要把他關閉
然後更新資料之後 把新的資料塞進陣列中
從alertdialog讀出來並打開一個新的alertdialog

聽聞可以用Android handler實作

但其實那邊我比較不熟
查知alertdialog有一個method 跟 Java的swing一樣 叫做isShowing()
那不就是跟android MediaPlayer中的isPlay()一樣嗎
索性 我用了一個boolean函數來解決

首先我們由[Android]Service Dialog製作  繼續接著實作
並且把需求變更為 連續傳10筆資料到service 會show出10個dialog來
但實際應用中 同一個小功能show太多的alertdialog其實很不討喜 而且很吃系統效能
我會設計成

宣告一個show的boolean函數

一開始假設是沒show的,所以我們可以寫成
if(show == false)
{建立一個dialog並show出
將show 設為true
}
但是第二回合怎麼辦???
既然設成true之後 第二回合就不會進去做
因此我會加一個
if(show == true)
{
//關掉dialog
dialog.dismiss();
//接著會想要把dialog sho一遍w出來  不要想成再寫一個新的show dialog
//這邊很重要,也就是神來一筆,我想了一些時間
//發現其實很簡單,就是把show設成false
show = false;
}
然後就結束了
接著我的作法是 把if(show == true)的判斷拉到if (show == false)上頭,結果會是這樣:

if(show == true)
{
dialog.dismiss();
show = false;
}


if(show == false)
{建立一個dialog並show出
將show 設為true
}

程式從別的activity呼叫這個service
並從上往下執行,結果ok!
來~讓我們trace一遍:
一開始show是false所以第一個不會進去,而是會進入if(show == false)並show一個dialog出來並將show設為true.
第二回合當呼叫跟資料進來時,因為dialog打開service還是在執行,而且show也還是true的狀態
所以會進入第一個判斷if(show == true)裡面去作
把dialog關閉掉
之後將show設成false.
因為程式會繼續往下執行所以當進入第二個判別時會把他打開再把show設成true
這樣就達成我們的需求了

很簡單但是我想了一些時間



沒有留言:

張貼留言