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

时间:2016-08-17 14:14:43

标签: android

我的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);
                        }
                    });

        }
    };
    }

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

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

时间选择器现在显示时间

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

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

datepicker现在显示日期

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

2 个答案:

答案 0 :(得分:0)

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

点击timedatepicker edittext后,将null或edittext内容发送到对话框。

如果数据为空,则会显示current timetoday's date的选择器, else显示带有预定义数据的选择器(调用时传递给对话框)。

答案 1 :(得分:0)

这方面的诀窍是禁用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

对于日期和时间选择器,我建议this library,它非常简单,可自定义,与许多操作系统版本兼容,看起来很棒。