![](/img/trans.png)
[英]Populating EditText with Date from CalendarView and Time from TimePicker
[英]how to add a date and time from Edittext to date picker and timepicker?
我的 fragment.java 是
public class myFragment1 extends Fragment {
private EditText ettime,etdate;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.create_event_step2, container, false);
toolbar = (Toolbar) view.findViewById(R.id.toolbar);
ettime = (EditText) view.findViewById(R.id.ettime);
etdate = (EditText) view.findViewById(R.id.etdate);
etdate.setOnClickListener(dateDialog());
ettime.setOnClickListener(timeDialog());
return view;
}
private View.OnClickListener timeDialog() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog gameTypes = new Dialog(getActivity(), android.R.style.Theme_DeviceDefault_Dialog);
gameTypes.requestWindowFeature(Window.FEATURE_NO_TITLE);
gameTypes.setContentView(R.layout.time_popup_layout);
gameTypes.show();
TimePicker tmPk1= (TimePicker) gameTypes.findViewById(R.id.fromtimePicker);
tmPk1.setOnTimeChangedListener(timeChanged());
// TimePicker tmPk2= (TimePicker) gameTypes.findViewById(R.id.totimePicker);
// tmPk2.setOnTimeChangedListener(timeChanged(tmPk2, "to"));
}
};
}
private TimePicker.OnTimeChangedListener timeChanged() {
return new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
String min=(String.valueOf(minute).length()==1?
"0"+String.valueOf(minute):String.valueOf(minute));
step2.put("STime", hourOfDay + ":" + min);
ettime.setText(hourOfDay + ":" + min);
// if (fr.equals("from")) from=hourOfDay+""+minute;
// if (fr.equals("to")) to=hourOfDay+""+minute;
}
};
}
private View.OnClickListener dateDialog() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog gameTypes = new Dialog(getActivity(),android.R.style.Theme_DeviceDefault_Dialog);
gameTypes.requestWindowFeature(Window.FEATURE_NO_TITLE);
gameTypes.setContentView(R.layout.date_popup_layout);
gameTypes.show();
DatePicker dpk1= (DatePicker) gameTypes.findViewById(R.id.datepk1);
// dpk1.updateDate(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH);
Calendar today = Calendar.getInstance();
dpk1.init(
today.get(Calendar.YEAR),
today.get(Calendar.MONTH),
today.get(Calendar.DAY_OF_MONTH),
new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view,
int year, int monthOfYear, int dayOfMonth) {
step2.put("GmDate", year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);
etdate.setText(year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);
}
});
}
};
}
我想要的是当我点击编辑文本时
如果时间编辑文本中没有数据..
时间选择器现在显示时间
否则时间选择器显示时间在编辑文本上
和
如果日期编辑文本中没有数据..
日期选择器现在显示日期
否则日期选择器显示日期在编辑文本上
有一个自定义DialogBuilder类,因为您的代码中将使用多个对话框。
单击time
或datepicker
edittext将null
或edittext内容发送到对话框。
如果data为null,则显示一个具有current time
或today's date
的选择器,否则显示一个具有预定义数据的选择器(在调用时传递给对话框)。
解决这个问题的技巧是禁用EditText
以便当它们获得焦点时键盘不会打开。 您可能还希望禁用对它们的关注。
您可以像这样在XML中执行此操作
<EditText
...
android:enabled="false"
android:focusable="false"
/>
或在有参考文献后的代码中
ettime.setEnabled(false);
ettime.setFocusable(false);
如果尚未输入时间,则需要向OnClickListeners
添加一些逻辑以将时间设置为当前时间。 例如:
EditText editText = (EditText) v;
if (editText.getText().toString().isEmpty()) {
// set current time
} else {
// open dialog
}
要将日期或时间从Date
或Calendar
对象格式化为人类可读的格式,请尝试使用SimpleDateFormat
。
对于日期和时间选择器,我建议使用此库 ,它非常简单,可自定义,与许多OS版本兼容并且看起来很棒。
date_of_blood.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Date value = new Date();
final Calendar cal = Calendar.getInstance();
cal.setTime(value);
new DatePickerDialog(Raise_Request.this.getContext(), new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int y, int m, int d) {cal.set(1, y);cal.set(2, m);cal.set(5, d);
new TimePickerDialog(Raise_Request.this.getContext(), new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int h, int min) {
cal.set(11, h);
cal.set(12, min);
date_of_blood.setText(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a", Locale.US).format(cal.getTime()));}
}, cal.get(11), cal.get(12), true).show();
}
}, cal.get(1), cal.get(2), cal.get(5)).show();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.