我的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上。怎么可能?
编辑: 我这样做了: 设置了资源c,如:
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的回答之后,我得到了解决方案。但是没有什么问题。 我正在使用此代码来初始化datepicker。
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月开始)而不是&#34; 1&#34;。那么为什么会这样呢?
感谢。
答案 0 :(得分: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() ).
答案 1 :(得分:1)
它向您展示了实现此目的的最佳方式。然后你可以根据自己的喜好进行更改。
答案 2 :(得分: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(" "));
}
答案 3 :(得分: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 );
}
};
答案 4 :(得分: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 + "");
}
};