ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年1月20日 星期四

Android AlertDialog : Show different message on each call

為了效率(?),Android alert dialog 一旦建立,就 cache 在 system。即使消失,也留在 cache。
下次再showDialog( ) 時,就直接叫出cache 的 dialog,不會再 create 一次。

所以要是AlertDialog 第一次show和第二次 show 不一樣的 message。就沒有辦法。
即使每次 showDialog( ) 前都用 setMessage( ) 設定過不一樣的內容也沒效。

所以每個 message 都要寫一個 dialog ?

後來發現 android system 好像是以showDialog( id ) 的 id 作為 identify cached dialog 的依據。

所以 每次 call showDialog( ) 都傳入不同的 id,那麼 onCreateDialog( ) 就會每次都被呼叫。
這樣,就可以設定每次不一樣的 Alert Message 了。
package rtk.atp.testmcu; import rtk.atp.testmcu.R; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; public class testmcu extends Activity { private String dialogInfoString = "Test OK?"; public void buttonhandler(View view) { switch (view.getId()) { case R.id.btn_BacklightLevel1: dialogInfoString = "Press OK"; showDialog(1); break; case R.id.btn_BacklightLevel2: dialogInfoString = "Press Fail"; showDialog(2); break; } } protected Dialog onCreateDialog(int id) { AlertDialog.Builder dlg = new AlertDialog.Builder(this); dlg.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { setTitle("Confirmed"); } }); dlg.setNegativeButton("Fail", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { setTitle("Canceled"); } }); dlg.setMessage(dialogInfoString); return dlg.create(); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 重點就在 showDialog(1), showDialog(2);
可以看到實際上onCreateDialog( ) 並沒有參考 dialogid 來決定要顯示的內容。

沒有留言:

標籤

網誌存檔