showDialog() 함수로 다이얼로그를 생성해서 보여줄 수 있다.
다이얼로그가 떠있는 상태에서 showDialog() 함수를 부르면 onCreateDialog() 함수 대신 onPrepareDialog() 함수가 불린다.
onPrepareDialog() 함수에 다이얼로그 내용 업데이트하는 코드를 작성하고 주기적으로 showDialog() 함수를 주기적으로 불러주면 된다.
예제: 다이얼로그에 count 값을 표시하고 1초 마다 count 값을 하나 올리고 다이얼로그 내용을 업데이트하는 코드
File: custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/Message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></TextView>
</LinearLayout>
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);
}
}
댓글 없음:
댓글 쓰기