Создание DatePicker и TimePicker в ошибке фрагмента вкладки

Я пытаюсь создать date picker а также number picker внутри tab фрагмент, но его ошибка получения. Я не могу понять, ошибка или я делаю неправильно, потому что расширяет fragment отличается от расширяет AppCompatActivity??

Может кто-нибудь указать, что мне не хватает и гильдии?

 public class KeyInWeightF extends Fragment implements View.OnClickListener {

        View contentView;
        EditText btnTime;
        EditText btnDate;
    TimePickerDialog timePickerDialog;
    DatePickerDialog datePickerDialog;

    Calendar calender = Calendar.getInstance();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        contentView=inflater.inflate(R.layout.daily_weight_fragement, container, false);
        return contentView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        btnTime = (EditText) contentView.findViewById(R.id.time_field);
        btnTime.setOnClickListener(this);
        btnDate = (EditText) contentView.findViewById(R.id.date_field);
        btnDate.setOnClickListener(this);
    }

    @Override
    public void onClick(View v){

        switch (v.getId()){

            case R.id.time_field:

                timePickerDialog = new TimePickerDialog(KeyInWeightF.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

                        Calendar timeCalendar = Calendar.getInstance();
                        timeCalendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
                        timeCalendar.set(Calendar.MINUTE,minute);

                        String timestring = DateUtils.formatDateTime(KeyInWeightF.this,timeCalendar.getTimeInMillis(),DateUtils.FORMAT_SHOW_TIME);
                                                                     // KeyInWeightF.this error
                        btnTime.setText("Time:"+timestring);



                    }
                },calender.get(Calendar.HOUR_OF_DAY),calender.get(Calendar.MINUTE),android.text.format.DateFormat.is24HourFormat(KeyInWeightF.this));
                                                                                                                                       //KeyInWeightF.this error
                timePickerDialog.show();
                break;

            case R.id.date_field:{

                datePickerDialog =new DatePickerDialog(KeyInWeightF.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                        Calendar dateCalender = Calendar.getInstance();
                        dateCalender.set(Calendar.YEAR,year);
                        dateCalender.set(Calendar.MONTH,monthOfYear);
                        dateCalender.set(Calendar.DAY_OF_MONTH,dayOfMonth);

                        String dateString = DateUtils.formatDateTime(KeyInWeightF.this,dateCalender.getTimeInMillis(),DateUtils.FORMAT_SHOW_TIME);
                                                                     // error of KeyInWeightF.this why ?
                        btnDate.setText("Date:" + dateString);
                    }
                },calender.get(Calendar.YEAR),calender.get(Calendar.MONTH),calender.get(Calendar.DAY_OF_MONTH));

                datePickerDialog.show();
                break;

        }
    }
}

Ошибка Logcat

Error:(65, 54) error: method formatDateTime in class DateUtils cannot be applied to given types;
required: Context,long,int
found: KeyInWeightF,long,int
reason: actual argument KeyInWeightF cannot be converted to Context by method invocation conversion

Error:(72, 114) error: method is24HourFormat in class DateFormat cannot be applied to given types;
required: Context
found: KeyInWeightF
reason: actual argument KeyInWeightF cannot be converted to Context by method invocation conversion

Error:(88, 54) error: method formatDateTime in class DateUtils cannot be applied to given types;
required: Context,long,int
found: KeyInWeightF,long,int
reason: actual argument KeyInWeightF cannot be converted to Context by method invocation conversion

Error:(79, 35) error: no suitable constructor found for DatePickerDialog(KeyInWeightF,<anonymous OnDateSetListener>,int,int,int)
constructor DatePickerDialog.DatePickerDialog(Context,int,OnDateSetListener,int,int,int) is not applicable
(actual and formal argument lists differ in length)
constructor DatePickerDialog.DatePickerDialog(Context,OnDateSetListener,int,int,int) is not applicable
(actual argument KeyInWeightF cannot be converted to Context by method invocation conversion)

Как я могу решить это?

2 ответа

Решение

Сначала исправьте свой onCreateView метод.

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            contentView=inflater.inflate(R.layout.daily_weight_fragement, container, false);
            btnTime = (EditText) contentView.findViewById(R.id.time_field);
            btnTime.setOnClickListener(this);
            btnDate = (EditText) contentView.findViewById(R.id.date_field);
            btnDate.setOnClickListener(this);
            return contentView;
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


        }

Logcat возвращается

Ошибка:(79, 35) ошибка: не найден подходящий конструктор для конструктора DatePickerDialog(KeyInWeightF,,int,int,int) DatePickerDialog.DatePickerDialog(Context,int,OnDateSetListener,int,int,int) не применим (фактический и формальный аргумент списки различаются по длине) конструктор DatePickerDialog.DatePickerDialog(Context,OnDateSetListener,int,int,int) не применим (фактический аргумент KeyInWeightF не может быть преобразован в Context путем преобразования вызова метода)

Решения

Вы должны использовать getActivity() вместо KeyInWeightF.this

getActivity() во фрагменте возвращает активность, с которой в данный момент связан фрагмент.

timePickerDialog = new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener() {

Так же как

  String timestring = DateUtils.formatDateTime(getActivity(),timeCalendar.getTimeInMillis(),DateUtils.FORMAT_SHOW_TIME);

Вы должны использовать getActivity() вместо того SomeActiviyy.this

datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener()

Чтобы создать указатель даты и времени во фрагменте вкладки, вы можете воспользоваться этой

и даже это полезно.

Другие вопросы по тегам