Как установить значение datePicker в EditText? - PullRequest
2 голосов
/ 15 декабря 2011

Мой макет XMl выглядит следующим образом:

<RelativeLayout  android:id="@+id/dateSelectionLayout"  android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical" android:visibility="visible">

            <EditText android:layout_height="wrap_content" android:layout_width="fill_parent" 
                android:singleLine="true" android:id="@+id/dateSelectionEditText" android:gravity="center"
                android:textColor="#000000" android:textSize="14sp" android:cursorVisible="false"
                android:focusable="false"
                android:hint="tax code" android:layout_weight="1"/>

            <DatePicker android:id="@+id/datePicker"
                android:layout_width="fill_parent" android:layout_height="wrap_content"
                android:layout_weight="1" android:layout_below="@+id/dateSelectionEditText"/>

    </RelativeLayout>

Теперь я хочу изменить значение editText, основанное на дате datePicker. Если пользователь изменяет дату, то это должно быть отражено в тексте редактирования в это время. Как это возможно?

Отредактировано: Я сделал так: Установите ресурс как:

datePicker = (DatePicker) findViewById(R.id.datePicker);
        dateSelectionEditText = (EditText)findViewById(R.id.dateSelectionEditText);

И установили метод переопределения так:

@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
    dateSelectionEditText.setText(dayOfMonth+"/"+monthOfYear+"/"+year);

}

Но все равно не получает никакого значения при изменении значения средства выбора даты.

Отредактировано:

После ответа Каспера Мёрча я получил решение. Но есть небольшая проблема. Я использую этот код для инициации выбора даты.

final Calendar c = Calendar.getInstance();  
        //dateSelectionEditText.setText( "" + dayOfMonth + "-" + monthOfYear + "-" + year );
        datePicker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new MyOnDateChangedListener());
        Toast.makeText(getApplicationContext(), ""+position+"", Toast.LENGTH_SHORT).show();

Теперь я могу видеть измененное значение из datePicker. Но в качестве первого месяца (с января) он принимает значение 0, а не «1». Так почему же так происходит?

Спасибо.

Ответы [ 5 ]

3 голосов
/ 15 декабря 2011

Что вам нужно сделать, это получить ссылку на EditText и DatePicker:

EditText editText = (EditText) findViewById( R.id.dateSelectionEditText );
DatePicker datePicker = (DatePicker) findViewById( R.id.datePicker );

Тогда вам нужно создать OnDateChangedListener:

private class MyOnDateChangedListener implements OnDateChangedListener {
  @Override
  public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
     editText.setText( "" + dayOfMonth + "-" + (monthOfYear + 1) + "-" + year );
  }
};

Осталось только инициализировать DatePicker:

datePicker.init( year, monthOfYear, dayOfMonth, new MyOnDateChangedListener() ).
1 голос
/ 15 декабря 2011

установить, как это

public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

        selectedDate = Integer.toString(mMonth)+"/"+Integer.toString(mDay)+"/"+Integer.toString(mYear);
        date_text.setText(selectedDate);
        System.out.println("selected date is:"+selectedDate);
        edittext.setText(selectedDate );
    }
};
1 голос
/ 15 декабря 2011

Инициализируйте эти переменные глобально в своей деятельности,

private EditText zopenDate;
        Button calendar;

        private int mYear;
        private int mMonth;
        private int mDay;
        private DatePickerDialog.OnDateSetListener mDateSetListener;

внутри вашего экземпляра

calendar=(Button)findViewById(R.id.datePicker);
zopenDate=(EditText)findViewById(R.id.dateSelectionEditText);

внутри вашего экземпляра используйте этого слушателя,

mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

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



calendar.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    showDialog(DATE_DIALOG_ID);
                }
            });




final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            // display the current date (this method is below)
            updateDisplay();

функция updatedisplay () вне createInstance (),

private void updateDisplay() {
        zopenDate.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mMonth + 1).append("-")
                    .append(mDay).append("-")
                    .append(mYear).append(" "));
    }
1 голос
/ 15 декабря 2011

Проверьте это Учебник по выбору даты

Он показывает вам лучший способ реализовать это.Тогда вы можете просто изменить его по своему вкусу.

0 голосов
/ 15 декабря 2011

Используйте это, чтобы отразить дату в тексте редактирования

private OnDateSetListener setDOB = new OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int month,
                    int dayOfMonth) {
                datePicker = (EditText) findViewById(R.id.dateOB);
                datePicker.setText(" " + dayOfMonth + "/" + (month + 1) + "/"
                        + year + "");

            }
        };
...