如何在android中更新对话框

时间:2014-04-07 22:16:09

标签: android dialog datepicker window

我有一个弹出对话框,用户输入数据,包括日期。要选择日期,我有一个按钮可以打开另一个带日期选择器的窗口。当我选择日期并返回第一个对话框时,除非我再次打开日期选择器,否则不会更改带日期的文本字段。从日期选择器窗口返回后,如何立即刷新或更新第一个对话框?

以下是第一个对话框的代码:

public void addEntry(View view) {
    final Dialog d = new Dialog(this);
    d.setContentView(R.layout.dialog);
    d.setTitle("Add Entry");
    d.setCancelable(true);      
    d.show();

    ...

    chooseDate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String str = selectDate();
            date.setText(str);
        }
    }); 
}

以下是您选择日期的第二个窗口的代码:

public String selectDate(){

    final Dialog datePicker = new Dialog(this);
    datePicker.setContentView(R.layout.choose_date);
    datePicker.setTitle("Choose Date...");
    datePicker.setCancelable(true);
    datePicker.show();

    Button selectFinalDate = (Button) datePicker.findViewById(R.id.selectDate);
    final DatePicker dp = (DatePicker) datePicker.findViewById(R.id.datePicker1);

    selectFinalDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            strDateTime = (dp.getMonth() + 1) + "/" + dp.getDayOfMonth() + "/" + dp.getYear();
            datePicker.dismiss();
        }
    });
    return strDateTime;
};

谢谢!

2 个答案:

答案 0 :(得分:0)

将click.setText(datechoosen)置于第二个对话框中,然后单击它将设置textView或按钮或在第一个对话框中显示日期的任何视图。如果在第二个对话框中无法访问它,请将其设置为静态,但在访问它之前检查它是否为空。

答案 1 :(得分:0)

未经测试,但应该有效。

...
 date.setText(str);
 view.invalidate(); // the view that you are showing in the dialog
...

所以在你的代码中,你更新了这个:

/**
* global variable for your dialog view
*/
View view =null;

                // in your addEntry(View view)
                ...
                Dialog d = new Dialog(this);
                view  = LayoutInflater.from(this).inflate(R.layout.dialog, null);
                d.setContentView(view);
                ...

                 // selectDate()
                 ...
                 date.setText(str);
                 view.invalidate(); // the view that you are showing in the dialog
                 ...

请参阅此answer