【问题标题】:Cannot resolve method, why?无法解析方法,为什么?
【发布时间】:2016-10-28 00:03:47
【问题描述】:

无法解析方法setDateListener(DateListener dl)。它是公共的,我在包含该方法的 DatePickerFragment.java 类的对象上使用它。

这里是调用setDateListener()方法的片段中的onCreateView()方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    mView = inflater.inflate(R.layout.fragment_sign_up_about, container, false);

    mFirstNameEditText = (EditText) mView.findViewById(R.id.sign_up_first_name_edit_text);
    mLastNameEditText = (EditText) mView.findViewById(R.id.sign_up_last_name_edit_text);
    mBirthdayEditText = (EditText) mView.findViewById(R.id.sign_up_birthday_edit_text);
    mContinueButton = (Button) mView.findViewById(R.id.sign_up_continue_2_button);

    mBirthdayEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            datePickerFragment = new DatePickerFragment();
            datePickerFragment.setDateListener(SignUpAboutFragment.this);
            datePickerFragment.show(getFragmentManager(), "datePicker");

        }
    });
}

这是 DatePickerFragment.java 类(已省略导入):

public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    private DateListener mCallback;

    public interface DateListener {
        void onDateSelected(String formattedDate);
    }

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

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Calendar c = Calendar.getInstance();
        c.set(year, monthOfYear, dayOfMonth);

        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        String formattedDate = sdf.format(c.getTime());
        mCallback.onDateSelected(formattedDate);
    }

    public void setDateListener(DateListener dateListener) {
        mCallback = dateListener;
    }
}

【问题讨论】:

  • 你实现SignUpAboutFragment中的接口了吗?
  • datePickerFragment 的声明类型是什么?
  • 没有接口SignUpAboutFragment。
  • 它的类型为 DialogFragment
  • 所以检查@Blackbelt的答案

标签: java android methods


【解决方案1】:

方法 setDateListener(DateListener dl) 无法解析。它是 public,我在类的一个对象上使用它 方法所在的 DatePickerFragment.java。

当您将引用分配给超类型时会发生这种情况。 DatePickerFragment 是 DialogFragment,相反 DialogFragment 不是 DatePickerFragment

【讨论】:

  • 好的,谢谢,所以我只是将类型更改为 DatePickerFragment 并且它起作用了!凉爽的。 =)
  • 如果此解决方案解决了您的问题,请考虑将其标记为已接受的答案,以便对其他人有所帮助
猜你喜欢
  • 1970-01-01
  • 2017-08-16
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 2021-09-16
  • 1970-01-01
相关资源
最近更新 更多