繁体   English   中英

如何从 Edittext 添加日期和时间到日期选择器和时间选择器?

[英]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);
                        }
                    });

        }
    };
    }

我想要的是当我点击编辑文本时

如果时间编辑文本中没有数据..

时间选择器现在显示时间

否则时间选择器显示时间在编辑文本上

如果日期编辑文本中没有数据..

日期选择器现在显示日期

否则日期选择器显示日期在编辑文本上

有一个自定义DialogBu​​ilder类,因为您的代码中将使用多个对话框。

单击timedatepicker edittext将null或edittext内容发送到对话框。

如果data为null,则显示一个具有current timetoday'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
}

要将日期或时间从DateCalendar对象格式化为人类可读的格式,请尝试使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM