2

我的 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>

现在我想更改基于 datePicker 日期的 editText 的值。如果用户更改日期,那么它应该在那时反映在 editText 上。怎么可能?

编辑:我已经这样做了:将资源设置为:

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);

}

但仍然没有对日期选择器值的更改产生任何价值。

编辑:

在 Kasper Moerch 的回答之后,我得到了解决方案。但是问题不大。我正在使用此代码来初始化日期选择器。

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”。那么为什么会这样呢?

谢谢。

4

5 回答 5

3

您需要做的是获取对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() ).
于 2011-12-15T12:16:15.483 回答
1

看看这个日期选择教程

它向您展示了实现这一点的最佳方法。然后,您可以根据自己的喜好更改它。

于 2011-12-15T12:03:41.263 回答
1

在您的活动中全局初始化这些变量,

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();

createInstance() 之外的函数 updatedisplay(),

private void updateDisplay() {
        zopenDate.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mMonth + 1).append("-")
                    .append(mDay).append("-")
                    .append(mYear).append(" "));
    }
于 2011-12-15T12:07:11.983 回答
1

像这样设置

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 );
    }
};
于 2011-12-15T12:25:45.153 回答
0

使用它来反映编辑文本中的日期

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 + "");

            }
        };
于 2011-12-15T12:10:47.107 回答