在片段上调用 ​​onDateSet activity

Call onDateSet on a Fragment activity

我在获取片段 activity 上的 DatePickerFragment 信息时遇到问题。 我有这段代码,摘自 Google 开发者页面:

public class DatePickerFragment extends DialogFragment {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    ADD add = new ADD();
    // Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener) add.getTargetFragment(), year, month, day);
}}

这是我的 MainActivity,当我收到用户选择的日期时:

public  class ADD extends Fragment implements AdapterView.OnItemSelectedListener, DatePickerDialog.OnDateSetListener {
//code
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    Log.w("DatePicker", "Date = " + year);
    mDateDisplay.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(dayOfMonth).append("-")
                    .append(monthOfYear + 1).append("-")
                    .append(year).append(" "));
}}

如果之前有人问过这个问题,我深表歉意。我一直在积极搜索此页面,并且仅针对活动回答了此问题,未针对片段回答。另外,我必须指出,我不是 Java 专家。我的直觉告诉我,问题可能出在DatePickerFragment的'return',但我无法解决问题。

您可能忘记在 ADD 片段中触发 setTargetFragment 方法:

DatePickerFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.setTargetFragment(this, 1234);
datePickerFragment.show(getChildFragmentManager(), "DatePickerFragment TAG");

此外,将 onCreateDialog 方法替换为:

final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener) getTargetFragment(), year, month, day);