在多个 edittext 视图上设置日期
Setting dates on multiple edittext views
当我在每个编辑文本视图中单击时,我遇到了多个动态呈现的编辑文本(编辑文本视图以编程方式呈现)需要填充日期的情况。我不知道需要多少编辑文本,因此不能在布局 XML 文件中对它们进行硬编码。
虽然我能够正确呈现视图,但是当我尝试在一个编辑文本上设置日期时,该值总是在组 中的最后一个编辑文本上设置。我无法弄清楚如何发送唯一 ID 来识别所选的编辑文本,以便正确设置日期。尝试浏览网站上的多个帖子,但无法让其中任何一个发挥作用。
如果需要,我可以粘贴整个代码。
代码段
private DatePickerDialog fromDatePickerDialog;
TableLayout table = new TableLayout(this);
TextView textViewColumn = new TextView(this);
textViewColumn.setGravity(Gravity.RIGHT);
textViewColumn.setTextColor(Color.BLACK);
textViewColumn.setPadding(0, 0, 5, 0);
textViewColumn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
textViewColumn.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
row.addView(textViewColumn);
if(childObj.getType().equals("Date")){
final EditText rowEditText = new EditText(this);
setDateTimeField(rowEditText); //setting the date
rowEditText.setMaxWidth(50);
rowEditText.setMaxHeight(40);
rowEditText.setTag(childObj.getName());
row.addView(rowEditText);
}
table.addView(row);
在编辑文本中设置日期 - 代码片段
private void setDateTimeField(final EditText dateEditText) {
dateEditText.setOnClickListener(this);
dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
dateEditText.setGravity(Gravity.LEFT);
Calendar newCalendar = Calendar.getInstance();
fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
dateEditText.setText(dateFormatter.format(newDate.getTime()));
}
},newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
fromDatePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
dialog.cancel();
dateEditText.setText("");
}
}
});
}
点击
@Override
public void onClick(View view) {
fromDatePickerDialog.show();
}
结果
我认为每次您创建一个新的 EditText
时,您是不是通过执行 fromDatePickerDialog = new DatePickerDialog(this, ne, ..
用一个新实例压倒了 fromDatePickerDialog
,并且唯一保存的是具有最后 ediText
。
您的解决方案可能是为每个 editText
创建一个新对象 DatePickerDialog
,例如:
private void setDateTimeField(final EditText dateEditText) {
dateEditText.setOnClickListener(this);
dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
dateEditText.setGravity(Gravity.LEFT);
Calendar newCalendar = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
dateEditText.setText(dateFormatter.format(newDate.getTime()));
}
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
dialog.cancel();
dateEditText.setText("");
}
}
});
}
您还可以在上述函数中设置 setOnClickListner,如:
dateEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
datePickerDialog.show();
}
});
希望这对您有所帮助,
当我在每个编辑文本视图中单击时,我遇到了多个动态呈现的编辑文本(编辑文本视图以编程方式呈现)需要填充日期的情况。我不知道需要多少编辑文本,因此不能在布局 XML 文件中对它们进行硬编码。
虽然我能够正确呈现视图,但是当我尝试在一个编辑文本上设置日期时,该值总是在组 中的最后一个编辑文本上设置。我无法弄清楚如何发送唯一 ID 来识别所选的编辑文本,以便正确设置日期。尝试浏览网站上的多个帖子,但无法让其中任何一个发挥作用。
如果需要,我可以粘贴整个代码。
代码段
private DatePickerDialog fromDatePickerDialog;
TableLayout table = new TableLayout(this);
TextView textViewColumn = new TextView(this);
textViewColumn.setGravity(Gravity.RIGHT);
textViewColumn.setTextColor(Color.BLACK);
textViewColumn.setPadding(0, 0, 5, 0);
textViewColumn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
textViewColumn.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
row.addView(textViewColumn);
if(childObj.getType().equals("Date")){
final EditText rowEditText = new EditText(this);
setDateTimeField(rowEditText); //setting the date
rowEditText.setMaxWidth(50);
rowEditText.setMaxHeight(40);
rowEditText.setTag(childObj.getName());
row.addView(rowEditText);
}
table.addView(row);
在编辑文本中设置日期 - 代码片段
private void setDateTimeField(final EditText dateEditText) {
dateEditText.setOnClickListener(this);
dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
dateEditText.setGravity(Gravity.LEFT);
Calendar newCalendar = Calendar.getInstance();
fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
dateEditText.setText(dateFormatter.format(newDate.getTime()));
}
},newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
fromDatePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
dialog.cancel();
dateEditText.setText("");
}
}
});
}
点击
@Override
public void onClick(View view) {
fromDatePickerDialog.show();
}
结果
我认为每次您创建一个新的 EditText
时,您是不是通过执行 fromDatePickerDialog = new DatePickerDialog(this, ne, ..
用一个新实例压倒了 fromDatePickerDialog
,并且唯一保存的是具有最后 ediText
。
您的解决方案可能是为每个 editText
创建一个新对象 DatePickerDialog
,例如:
private void setDateTimeField(final EditText dateEditText) {
dateEditText.setOnClickListener(this);
dateEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
dateEditText.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
dateEditText.setGravity(Gravity.LEFT);
Calendar newCalendar = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
dateEditText.setText(dateFormatter.format(newDate.getTime()));
}
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
dialog.cancel();
dateEditText.setText("");
}
}
});
}
您还可以在上述函数中设置 setOnClickListner,如:
dateEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
datePickerDialog.show();
}
});
希望这对您有所帮助,