提问者:小点点

EditText上的DatePickerDialog


我试图创建一个EditText,当我单击它时,会显示一个DatePickerDialog/code>,这样我就可以选择我的生日,然后我选择的日期会写在EditText中。 我在网上找到了这段代码,但我有问题,因为它的行是这样说的:

new DatePickerDialog(TheClassName.this, datePickerListener, myCalendar..

DatePickerListener是红色的,我不明白为什么? 如果有人能帮助我,我将非常感激。

//some of the needed imports
import android.widget.DatePicker;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;


//private field variables in the Activity class
private Calendar myCalendar = Calendar.getInstance();
private EditText etDate;

//onCreate method of the Activity class
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    etDate = (EditText) findViewById(R.id.et_date);
    etDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new DatePickerDialog(TheClassName.this, datePickerListener, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH)).show();        
        }
    });

    DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            String myFormat = "MM/dd/yy";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
            etDate.setText(sdf.format(myCalendar.getTime()));
        }

    };
}

共1个答案

匿名用户

您需要做一些更改,如下所示

>

  • 初始化MyCalendal以避免NullPointerException

    MyCalendar=新GregorianCalendar();

    在使用DatePickerListener之前声明它以避免未解析的变量

    TheClassName.this更改为您的activity类名以获取上下文; 我在下面假设为mainactivity.this

    使edittext& DatePickerDialog.OnDateSetListener作为Final,以便从EditTextOnClickListener回调访问它们

    因此,在完成这些更改后,您可以使用以下代码替换代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        final EditText etDate = (EditText) findViewById(R.id.et_date);
    
        myCalendar = new GregorianCalendar();
    
        final DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
    
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                                  int dayOfMonth) {
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    
                String myFormat = "MM/dd/yy";
                SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
                etDate.setText(sdf.format(myCalendar.getTime()));
            }
    
        };
    
        etDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new DatePickerDialog(MainActivity.this, datePickerListener, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        });
    
    
    }