首页 > 解决方案 > DatePicker 对话框,带有来自 edittext 的预选值

问题描述

我有一个 datepicker 对话框,单击 edittext 打开。我想要的是,当我单击edittext 时,日期选择器对话框应显示已存在于edittext 中的日期。

我的代码: XML 代码:

<EditText
            android:id="@+id/dob"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:inputType="date"
            android:hint="Date Of Birth"
            android:textSize="12sp"
         android:drawableRight="@drawable/ic_perm_contact_calendar_black_24dp"
            android:drawableTint="@android:color/holo_orange_light"/>

Java代码:

dob.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar myCalendar = Calendar.getInstance();
                DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        // TODO Auto-generated method stub
                        myCalendar.set(Calendar.YEAR, year);
                        myCalendar.set(Calendar.MONTH, monthOfYear);
                        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        String myFormat = "dd-MMM-yyyy"; // your format
                        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());

                        dob.setText(sdf.format(myCalendar.getTime()));
                    }

                };
                new DatePickerDialog(PersonalDetailsFormActivity.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();

            }
        });

我在网上浏览过很多链接,但都展示了如何在edittext中设置日期,但我想要的是与此相反的。edittext 中有一个值,并且日期选择器对话框应该以该日期作为预选值打开。

标签: androidandroid-edittextandroid-datepicker

解决方案


尝试这个

以 MM/DD/YYYY 格式输入日期,然后单击 Edittext 以便 DatePicker 弹出输入日期。

MainActivity.java

package mydemo.com.datepiker;

import android.app.DatePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    String date = "";
    EditText edittext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edittext = (EditText) findViewById(R.id.edittext);
        edittext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); // Make sure user insert date into edittext in this format.
                Date dateObject;
                try {
                    String dob_var = (edittext.getText().toString());
                    dateObject = formatter.parse(dob_var);
                    date = new SimpleDateFormat("dd/MM/yyyy").format(dateObject);

                    String[] items1 = date.split("/");
                    String d1 = items1[0];
                    String m1 = items1[1];
                    String y1 = items1[2];
                    int d = Integer.parseInt(d1);
                    int m = Integer.parseInt(m1);
                    int y = Integer.parseInt(y1);

                    DatePickerDialog datePicker = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                            String date = String.valueOf(dayOfMonth) + "/" + String.valueOf(monthOfYear + 1)
                                    + "/" + String.valueOf(year);
                            edittext.setText(date);
                        }
                    }, y, m - 1, d);
                    datePicker.show();

                } catch (java.text.ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Log.i("Exception is: ", e.toString());
                }
            }
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="mydemo.com.datepiker.MainActivity">

    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:hint="Enter Date:"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

在此处输入图像描述

希望这现在可以帮助你。


推荐阅读