showDialog() 함수로 다이얼로그를 생성해서 보여줄 수 있다.
다이얼로그가 떠있는 상태에서 showDialog() 함수를 부르면 onCreateDialog() 함수 대신 onPrepareDialog() 함수가 불린다.
onPrepareDialog() 함수에 다이얼로그 내용 업데이트하는 코드를 작성하고 주기적으로 showDialog() 함수를 주기적으로 불러주면 된다.
예제: 다이얼로그에 count 값을 표시하고 1초 마다 count 값을 하나 올리고 다이얼로그 내용을 업데이트하는 코드
File: custom_dialog.xml
File: DialogUpdateTest.java
import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; /** * DialogUpdateTest */ public class DialogUpdateTest extends Activity { private final static int UID_UPDATE_DLG_TEST = 0; private final static int DLG_TEST = 0; private static int count = 0; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case UID_UPDATE_DLG_TEST: showDialog(DLG_TEST); handler.sendEmptyMessageDelayed(UID_UPDATE_DLG_TEST, 1000); break; default: break; } super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); showDialog(DLG_TEST); } @Override protected void onDestroy() { super.onDestroy(); removeDialog(DLG_TEST); handler.removeCallbacksAndMessages(null); } @Override protected Dialog onCreateDialog(int id, Bundle args) { switch (id) { case DLG_TEST: { AlertDialog.Builder builder = new AlertDialog.Builder(this); LayoutInflater inflater = getLayoutInflater(); View view = inflater.inflate(R.layout.custom_dialog, null); builder.setView(view); builder.setTitle("Title"); builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { dialog.dismiss(); removeDialog(DLG_TEST); handler.removeMessages(UID_UPDATE_DLG_TEST); } }); handler.sendEmptyMessageDelayed(UID_UPDATE_DLG_TEST, 1000); return builder.create(); } default: break; } return super.onCreateDialog(id, args); } @Override protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { switch (id) { case DLG_TEST: { TextView tv = (TextView)dialog.findViewById(R.id.Message); tv.setText("count:" + (count++)); break; } default: break; } super.onPrepareDialog(id, dialog, args); } }
댓글 없음:
댓글 쓰기