Диалоговое окно DatePicker с предварительно выбранным значением из 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();

            }
        });

Я просмотрел много ссылок в Интернете, но все они показывают, как установить дату в тексте редактирования, но я хочу, чтобы это было наоборот. В тексте редактирования есть значение, и диалоговое окно выбора даты должно открыться с этой датой в качестве предварительно выбранного значения.


person jeevika dhillon    schedule 05.09.2018    source источник
comment
с какой проблемой вы столкнулись сейчас?   -  person sasikumar    schedule 05.09.2018
comment
@sasikumar: Смотрите, у меня есть текст редактирования с заполненным значением даты. Когда я нажимаю на этот текст редактирования, я хочу показать значение, уже сохраненное в тексте редактирования, в средстве выбора даты.   -  person jeevika dhillon    schedule 05.09.2018
comment
@jeevikadhillon, пожалуйста, проверьте мой обновленный ответ.   -  person InsaneCat    schedule 05.09.2018
comment
В качестве отступления подумайте о том, чтобы выбросить давно устаревший и заведомо неприятный SimpleDateFormat и друзей и добавить ThreeTenABP на свой Android. проект, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать.   -  person Ole V.V.    schedule 05.09.2018


Ответы (4)


Попробуй это

Введите дату в формате ММ/ДД/ГГГГ и нажмите «Редактировать текст», чтобы появилось всплывающее окно 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>

введите здесь описание изображения

Надеюсь, это может помочь вам сейчас.

person InsaneCat    schedule 05.09.2018
comment
Уважаемый, этот код предназначен для установки даты в тексте редактирования. Но я хочу другого. В тексте редактирования уже есть какое-то значение, и когда я нажимаю на этот текст редактирования, я хочу, чтобы диалоговое окно выбора даты открывалось с датой, которая уже присутствует в тексте редактирования. - person jeevika dhillon; 05.09.2018
comment
Эй, введите дату в формате dd/MM/yyyy в тексте редактирования, а затем посмотрите приведенный выше фрагмент, затем установите эту дату в DatePicker. эта дата установлена ​​​​окончательно в Toast см. - person InsaneCat; 05.09.2018
comment
@jeevikadhillon, пожалуйста, проверьте мой обновленный ответ. надеюсь, что это может помочь вам сейчас. - person InsaneCat; 05.09.2018
comment
Спасибо @InsaneCat - person jeevika dhillon; 05.09.2018
comment
@jeevikadhillon Рад помочь вам. - person InsaneCat; 06.09.2018

Вы можете вызвать datePickerDialog с параметрами,

DatePickerDialog dialog = new DatePickerDialog(this, mDateSetListener, year, month, day);

Здесь месяц, число и год — целые числа.

Найдите ниже пример кода:

public class MainActivity extends AppCompatActivity {

private EditText chooseDate;
private DatePickerDialog.OnDateSetListener mDateSetListener;
final Calendar myCalendar = Calendar.getInstance();
private Date date;
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    chooseDate = (EditText) findViewById(R.id.choose_date);

    chooseDate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            mDateSetListener = 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);
                    chooseDate.setText(formatter.format(myCalendar.getTime()));
                }

            };
            try {
                if (chooseDate.getText().toString().isEmpty()) {
                    date = new Date();

                } else {
                    date = formatter.parse(chooseDate.getText().toString());
                }
                Calendar calendar = new GregorianCalendar();
                calendar.setTime(date);
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int day = calendar.get(Calendar.DAY_OF_MONTH);
                new DatePickerDialog(MainActivity.this, mDateSetListener, year, month, day).show();
            } catch (ParseException e) {
                Log.d(TAG, "ParseException" + e);
            }
        }
    });
}

}

person Archana    schedule 05.09.2018
comment
Что такое mDateSetListener? - person jeevika dhillon; 05.09.2018
comment
Ссылка на OnDateSetListener - person Archana; 05.09.2018
comment
Удивительно @Archana, спасибо! Это действительно было нужно. :) - person jeevika dhillon; 05.09.2018
comment
@InsaneCat Я не уверен, почему вы претендуете на другой ответ? ;-) - person David Walschots; 06.09.2018

Вам нужно использовать метод updateDate(year, month, dayOfMonth), чтобы установить дату DatePicker.

Пример кода:

DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
datePicker.updateDate(2018, 9, 5);
person Juanjo Berenguer    schedule 05.09.2018

Редактировать текст

 <EditText
                android:id="@+id/txt_Date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:background="@null"
                android:hint="dd/mm/yyyy" />

внутри деятельности

txt_Date = (EditText) findViewById(R.id.txt_Date);
 txt_Date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                layDatePicket.setEnabled(false);
                DatePickerDialog dialog = new DatePickerDialog(Activity.this,
                        listener, calender.get(Calendar.YEAR), calender.get(Calendar.MONTH), calender.get(Calendar.DATE));
              // set your date in the above line.
                dialog.show();                                    
            }
        });

Реализуйте прослушиватель здесь.

 listener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                String date = dayOfMonth + "/" + ((month < 10) ? "0" + month : month) + "/" + year;
                txt_datepicker.setText(date);
            }
        };
person Nandha    schedule 05.09.2018