无法调用对象方法

时间:2014-03-22 15:05:46

标签: java methods

我正在开发一款Android应用。它使用'datepicker'作为数据输入表单的一部分。我编写了一个getter方法"onDateSet"来从对象返回数据,但是我无法从类的实例中调用该方法。

行:datePicker.getSelectedDate();我收到的'方法无法解决'错误 当我尝试直接访问变量时,我收到相同的消息。 datePicker.selecteddate

如果有人能指出我正确的方向,我将不胜感激。

public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @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);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }
    int selectedDate;
    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
        selectedDate = day+month+year;
    }
    public int getSelectedDate() {
        return selectedDate;
    }

}

public void showDatePickerDialog(View view) {
    DialogFragment datePicker = new DatePickerFragment();
    datePicker.show(getFragmentManager(), "datePicker");
    int output = datePicker.getSelectedDate();
}

1 个答案:

答案 0 :(得分:0)

你有:

DialogFragment datePicker = new DatePickerFragment();

你的意思是:

DatePickerFragment datePicker = new DatePickerFragment();

这是因为您的方法是子类DatePickerFragment的成员,而不是基类DialogFragment的成员。

本质上,当您通过其基类型引用对象时,编译器只知道基类型声明的方法。它无法知道任意DialogFragment实际上是DatePickerFragment(或任何其他派生类型)。

另一种选择,如果您知道DatePickerFragment,则明确将datePicker投射到DatePickerFragment

DialogFragment datePicker = new DatePickerFragment();
...
int output = ((DatePickerFragment)datePicker).getSelectedDate();

如果ClassCastException实际上不是datePicker,这当然会失败DatePickerFragment