View.Onclicklistener中的Datepicker

时间:2017-03-01 20:25:24

标签: android datepicker onclick onclicklistener

我试图在一个单独的类中设置我的日期选择器,基本上是为了保持我的代码干净。我的代码在活动上使用时有效,但当我尝试在View.OnclickListener上使用它时,我似乎无法正确获取上下文,并且收到了context.getsystemservice错误。你能发现我做错了吗?

View.onclicklistener

public class SelectDate extends Activity implements View.OnClickListener {


public Context context;
public EditText selectDate;
public SelectDate(EditText selectDate) {
    this.selectDate = selectDate;
}




int year_x, month_x, day_x;
int dateInt;
DatePickerDialog dialog;


@Override
 public void onClick(View v) {

    InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    im.hideSoftInputFromWindow(selectDate.getWindowToken(), 0);


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

            year_x = year;
            month_x = monthOfYear;
            day_x = dayOfMonth;

            int month = monthOfYear + 1;
            String date = dayOfMonth + "";
            if (date.length() == 1)
                date = "0" + date;
            date = month + date;




            selectDate.setText(dayOfMonth + "/" + month + "/" + year);
            dateInt = Integer.parseInt(date);

        }
    }


            ,year_x,month_x,day_x);

    // Disable dates in the past
    dialog.getDatePicker().

            setMinDate(System.currentTimeMillis()-1000);


    dialog.show();

}


}

设置onclick侦听器

EditText selectDate = (EditText)convertView.findViewById(R.id.editDate);
convertView.findViewById(R.id.editDate).setOnClickListener(new SelectDate(selectDate));

错误消息

android.content.Context.getSystemService(java.lang.String)' on a null object reference

2 个答案:

答案 0 :(得分:0)

您没有初始化班级中的上下文字段值。您可以简单地用“this”替换它,而不是活动中的上下文字段。

答案 1 :(得分:0)

始终是使用您可用的View对象的最佳方法。

<receiver android:name=".content.UsbReceiver">

    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>

    <meta-data
        android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
        android:resource="@xml/device_filter" />

</receiver>