Пользовательская кнопка DatePicker.Пользовательские компоненты в Android - PullRequest
1 голос
/ 11 июля 2011

Я пытаюсь создать пользовательский компонент кнопки выбора даты.Кнопка отображает дату и при нажатии открывает диалоговое окно выбора даты.Я реализовал этот метод с помощью Android Dev Docs / Tutorial, однако у меня их 2 в моем коде, и я подумал, что было бы лучше создать пользовательский класс с именем DateButton, который бы немного очистил мой код.Поэтому, когда мне нужна подобная кнопка, я могу создать объявление DateButton в моем XML.В любом случае, это мой первый раз, когда я создаю собственный вид, и мне нужна помощь, когда я пытаюсь добавить свою пользовательскую кнопку в свой макет, я получаю сообщение об ошибке:

error! ClassNotFoundException: android.app.DatePickerDialog$OnDateSetListener

Вот что я хочу, чтобы кнопка смотрела(очень просто)

enter image description here

, и при щелчке по нему открывается диалоговое окно выбора даты в Android:

enter image description here

Вот мой текущий код для этой пользовательской кнопки даты:

import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;


public class DateButton extends Button implements OnClickListener, OnDateSetListener {

     private static final int DATE_DIALOG_ID = 0;
private int mYear;
private int mMonth;
private int mDay;
private OnDateSetListener mDateSetListener;

public DateButton(Context context) {
    super(context);
}

public DateButton(Context arg0, AttributeSet arg1) {
    super(arg0, arg1);
}

public DateButton(Context arg0, AttributeSet arg1, int arg2) {
    super(arg0, arg1, arg2);
}

@Override
public void onClick(View v) {
    showDialog(DATE_DIALOG_ID);
}

private DatePickerDialog showDialog(int dateDialogId) {
    return new DatePickerDialog(getContext(),
            mDateSetListener,
            mYear, mMonth, mDay);
}

public void onDateSet(DatePicker view, int year, 
        int monthOfYear, int dayOfMonth) {
    mYear = year;
    mMonth = monthOfYear;
    mDay = dayOfMonth;
    updateDisplay();
}

private void updateDisplay() {
    this.setText(
            new StringBuilder()
            // Month is 0 based so add 1
            .append(pad(mMonth + 1)).append("/")
            .append(pad(mDay)).append("/")
            .append(mYear).append(" "));
}

//if single digit append "0" to the number
private static String pad(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
   }
    }

РЕДАКТИРОВАТЬ: У меня все еще есть проблемы, у кого-нибудь есть примеры чего-то похожего на это?Спасибо за любую помощь!

1 Ответ

0 голосов
/ 11 июля 2011

Попробуйте изменить showDialog метод на:

private showDialog() {
        DatePickerDialog dialog = new DatePickerDialog(getContext(),
            this, mYear, mMonth, mDay);
        dialog.show();
    }
}

Также добавьте код инициализации для mYear, mMonth, mDay.

...