Android 从对话框 2 设置对话框 1 中的文本?

Android set Text in Dialog 1 from Dialog 2?

我有 2 个对话框。一个是普通输入对话框,第二个是 DatePickerDialog。我想要做的是将其中一个 TextView 的内容设置为 DatePickerDialog 中选择的日期的第一个对话框,如下所示:

对话 1:

public void showEventDialog() {
    dialog = new Dialog(MainActivity.context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.post_event_dialog);
    dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

    // VIEWS:
    ...

    dateText = (TextView) dialog.findViewById(R.id.eventdate);
    dateText.setTypeface(MainActivity.textMain);
    dateText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDateDialog();
        }
    });

    ...

    dialog.show();
}

和对话 2:

 public void showDateDialog() {
    Calendar newCalendar = Calendar.getInstance();
    fromDatePickerDialog = new DatePickerDialog(MainActivity.context, new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            dateText.setText("Test");
        }

    }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
    fromDatePickerDialog.show();
}

但是,当我尝试在第一个对话框中设置 TextView 的文本时,出现 NullPointer 异常。我该如何正确地做到这一点?我知道这一定是一个非常微不足道的问题,但我根本无法理解它。 谢谢

因为,在第二个对话框中没有 TextView dateText 的引用,因为它始终保持 NULL(它仅在从第一个对话框初始化后可用)

只需将您的 dateText 引用传递给 showDialog() 赞,

    public void showDateDialog(final TextView dateText) {
        Calendar newCalendar = Calendar.getInstance();
        fromDatePickerDialog = new DatePickerDialog(MainActivity.context, new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                dateText.setText("Test");
            }

    }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
    fromDatePickerDialog.show();
} 

然后像这样打电话,

showDateDialog(dateText);