EditText 클릭시 TimePicker 대화 상자


106

사용자가 EditText 필드를 클릭 할 때 팝업되는 DatePicker가 이미 있습니다.

eReminderDate.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //To show current date in the datepicker
                Calendar mcurrentDate = Calendar.getInstance();
                int mYear = mcurrentDate.get(Calendar.YEAR);
                int mMonth = mcurrentDate.get(Calendar.MONTH);
                int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog mDatePicker;
                mDatePicker = new DatePickerDialog(AddReminder.this, new OnDateSetListener() {
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
                        // TODO Auto-generated method stub
                    /*      Your code   to get date and time    */
                        selectedmonth = selectedmonth + 1;
                        eReminderDate.setText("" + selectedday + "/" + selectedmonth + "/" + selectedyear);
                    }
                }, mYear, mMonth, mDay);
                mDatePicker.setTitle("Select Date");
                mDatePicker.show();
            }
        });

비슷한 방식으로 TimePicker를 시도했지만 작동하지 못했습니다. 이것은 그것을 작동시키는 나의 시도입니다.

 eReminderTime.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Calendar mcurrentTime = Calendar.getInstance();
                int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
                int minute = mcurrentTime.get(Calendar.MINUTE);
                TimePickerDialog mTimePicker;
                mTimePicker = new TimePickerDialog(AddReminder.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                        eReminderTime.setText( ""selectedHour + ":" + selectedMinute);
                    }
                }, hour, minute);
                mTimePicker.setTitle("Select Time");
                mTimePicker.show();

            }
        });

DatePicker에서했던 것과 비슷한 방식으로 수행하는 것이 불가능합니까?

이 코드로 EditText 필드를 클릭하면 TimePicker 팝업을 만들어 보았습니다.

      eReminderTime.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            showDialog(TIME_DIALOG_ID);
        }
    });

어떤 이유로 Android Studio에 입력했을 때 'showDialog'가 채점되었습니다.

아무도 내가 어디로 잘못 가고 있는지에 대한 팁을 줄 수 있습니까? 아니면 Custom DialogFragment를 사용해야합니까?


두 번째 코드 블록에서 실제로 작동하지 않는 것은 무엇입니까?, 표시되지 않고 컴파일되지 않습니까?
Robadob 2013

""와 selectedHour 사이의 setText 부분에 오류가 표시되고 ','또는 ')'가 필요하다고 말하지만 ''를 넣으면 " 'setText (java.lang.String, java) 메소드를 해결할 수 없습니다. .lang.String) "
Mark O'Sullivan

답변:


234
eReminderTime.setText( "" + selectedHour + ":" + selectedMinute);

귀하는없는 +사이에 ""선택한 시간, setText당신은 모든 부품을 (첫 번째 따옴표 가능성이 불필요) 연결할 필요가 있도록 방법은, 하나의 문자열을.

eReminderTime.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Calendar mcurrentTime = Calendar.getInstance();
            int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
            int minute = mcurrentTime.get(Calendar.MINUTE);
            TimePickerDialog mTimePicker;
            mTimePicker = new TimePickerDialog(AddReminder.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                    eReminderTime.setText( selectedHour + ":" + selectedMinute);
                }
            }, hour, minute, true);//Yes 24 hour time
            mTimePicker.setTitle("Select Time");
            mTimePicker.show();

        }
    });

두 번째 오류를 수정해야하며 마지막 매개 변수를 제공하지 않았습니다. TimePickerDialog 생성자


그것을 시도하고 전에이 메시지를 받았기 때문에 전에 시도했을 것이라고 생각합니다. 이제 'new TimePickerDialog'이후와 'mTimePicker.setTitle'이전에 모든 오류가 표시됩니다. 오류는 'Cannot resolve constructor'TimePickerDialog (com.appname.classname, android.app.TimePickerDialog.OnTimeSetListener, int, int) ''
Mark O'Sullivan

2
Android 문서를 확인하는 경우 대화 상자가 24 시간인지 여부를 나타내는 최종 부울 매개 변수를 추가해야합니다. TimePickerDialog (컨텍스트 컨텍스트, TimePickerDialog.OnTimeSetListener 콜백, INT hourOfDay, INT 분, 부울 is24HourView)
Robadob

참 / 거짓 부울에 대해 완전히 잊어 버렸고, 이전에 보았지만 코드를 날짜 선택기와 비슷한 것으로 변경했을 때 포함하는 것을 잊었습니다. 당신의 도움을 주셔서 감사합니다!
Mark O'Sullivan

3
감사합니다. 분도 형식화하고 싶을 것입니다. eReminderTime.setText (selectedHour + ":"+ String.format ( "% 02d", selectedMinute));
Stephen Paul

나는 더 유용하고 재사용 가능한 것입니다 희망 -> TimePickerUniversal
Pratik Butani

27

재사용 가능한 방식으로 작성하지 않는 이유는 무엇입니까?

SetTime 클래스를 만듭니다.

class SetTime implements OnFocusChangeListener, OnTimeSetListener {   

       private EditText editText;
       private Calendar myCalendar;

       public SetTime(EditText editText, Context ctx){
           this.editText = editText;
           this.editText.setOnFocusChangeListener(this);
           this.myCalendar = Calendar.getInstance();

       }

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            if(hasFocus){
                int hour = myCalendar.get(Calendar.HOUR_OF_DAY);
                int minute = myCalendar.get(Calendar.MINUTE);
                new TimePickerDialog(ctx, this, hour, minute, true).show();
            }
        }

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            // TODO Auto-generated method stub
            this.editText.setText( hourOfDay + ":" + minute);
        }

    }

그런 다음 onCreate 함수에서 호출합니다.

    EditText editTextFromTime = (EditText) findViewById(R.id.editTextFromTime);
    SetTime fromTime = new SetTime(editTextFromTime, this);

오전 / 오후 구하는 방법?
Pratik Butani

10

edittext의 onclick 리스너에서 아래 코드를 사용할 수 있습니다.

  TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this,
    new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay,
                              int minute) {

            tv_time.setText(hourOfDay + ":" + minute);
        }
    }, hour, minute, false);
     timePickerDialog.show();

Android timepicker 예제 에서 전체 코드를 볼 수 있습니다.


3

시간을 여러 번 변경할 때 포커스 변경과 클릭 리스너를 모두 지원하도록 @Sumoanand의 멋진 재사용 가능한 솔루션을 확장했습니다. 또한 마지막으로 선택한 시간을 기억하도록 선택기 캘린더 업데이트 + HH : mm 형식 지정

public class TimeSetter implements View.OnFocusChangeListener, TimePickerDialog.OnTimeSetListener, View.OnClickListener {

    private EditText mEditText;
    private Calendar mCalendar;
    private SimpleDateFormat mFormat;

    public TimeSetter(EditText editText){
       this.mEditText = editText;
       mEditText.setOnFocusChangeListener(this);
       mEditText.setOnClickListener(this);
    }

    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus){
            showPicker(view);
        }
    }

    @Override
    public void onClick(View view) {
        showPicker(view);
    }

    private void showPicker(View view) {
        if (mCalendar == null)
            mCalendar = Calendar.getInstance();

        int hour = mCalendar.get(Calendar.HOUR_OF_DAY);
        int minute = mCalendar.get(Calendar.MINUTE);

        new TimePickerDialog(view.getContext(), this, hour, minute, true).show();
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        mCalendar.set(Calendar.MINUTE, minute);

        if (mFormat == null)
            mFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());

        this.mEditText.setText(mFormat.format(mCalendar.getTime()));
    }

}

onCreate에서 사용 :

EditText timeEditText = (EditText) rootView.findViewById(R.id.timeText);
new TimeSetter(timeEditText);

솔루션에 감사드립니다. :) AM / PM과 함께 사용하도록 편집했습니다. 여기에 체크 아웃 : TimePicker를 /와 AM / PM없이
Pratik Butani에게

2

이것이 당신에게 효과가 있을지 모르겠습니다.

날짜 / 시간 선택기 대화 상자에 대한 메소드를 작성하십시오.

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is called, below method will be called.
    // The arguments will be working to get the Day of Week to show it in a special TextView for it.

    public void onDateSet(DatePicker view, int selectedYear,
                          int selectedMonth, int selectedDay) {
        String year1 = String.valueOf(selectedYear);
        String month1 = String.valueOf(selectedMonth + 1);
        String day1 = String.valueOf(selectedDay);
        delivDate.setText(month1 + "/" + day1 + "/" + year1);
        delivDay.setText(DateFormat.format("EEEE", new Date(selectedYear, selectedMonth, selectedDay - 1)).toString());
    }
};

그런 다음 원하는 곳에서 이렇게 할 수 있습니다.

public void setDateOnClick (View view) {
    Calendar cal = Calendar.getInstance();

    DatePickerDialog datePicker = new DatePickerDialog(this, datePickerListener,
            cal.get(Calendar.YEAR),
            cal.get(Calendar.MONTH),
            cal.get(Calendar.DAY_OF_MONTH));
    //Create a cancel button and set the title of the dialog.
    datePicker.setCancelable(false);
    datePicker.setTitle("Select the date");
    datePicker.show();
}

이것을 해결책으로 찾으시기 바랍니다.


"// 취소 버튼 만들기 [...]"및 "datePicker.setCancelable (false);"두 줄이 마음에 듭니다. hue hue hue
MojioMS 2016 년

이 질문은 질문과 관련이 없다고 생각합니다.
Pratik Butani

1

에 마지막 인수를 넣지 않았습니다 TimePickerDialog.

{
public TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute,
            boolean is24HourView) {
        this(context, 0, listener, hourOfDay, minute, is24HourView);
    }
}

이것은 TimePickerclass. 부울 인수가 필요합니다.is24HourView


0
public void onClick1(View v) {
  DatePickerDialog dialog = new DatePickerDialog(this, this, 2013, 2, 18);
  dialog.show();
}

public void onDateSet1(DatePicker view, int year1, int month1, int day1) {
  e1.setText(day1 + "/" + (month1+1) + "/" + year1);
}

7
단지 코드를 게시하지 마십시오. 코드가 수행하는 작업과 OP의 문제를 해결하는 이유를 설명하십시오.
dimo414

0
public class **Your java Class** extends ActionBarActivity implements  View.OnClickListener{
date = (EditText) findViewById(R.id.date);
date.setInputType(InputType.TYPE_NULL);
        date.requestFocus();
        date.setOnClickListener(this);
        dateFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);

        setDateTimeField();

private void setDateTimeField() {
        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);
                date.setText(dateFormatter.format(newDate.getTime()));
            }

        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

    }
@Override
    public void onClick(View v) {
        fromDatePickerDialog.show();
    }
}

이 코드에 대한 몇 가지 추가 정보는 아마도 도움이 될 것입니다.
Pyves

0

나에게 timmer 대화 상자에 대해 dpFlightDate 편집 텍스트를 두 번 이상 클릭하면 대화 상자가 두 개 이상 나타납니다. 이 대화 상자가 한 번만 표시되는 것을 방지하고 사용자가 두 번째로 클릭하면 대화 상자가 다시 표시되지 않아야합니다 (예 : 대화 상자가 화면에있는 경우).

          // perform click event on edit text
            dpFlightDate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // calender class's instance and get current date , month and year from calender
                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR); // current year
                    int mMonth = c.get(Calendar.MONTH); // current month
                    int mDay = c.get(Calendar.DAY_OF_MONTH); // current day
                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(frmFlightDetails.this,
                            new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    // set day of month , month and year value in the edit text
                                    dpFlightDate.setText(dayOfMonth + "/"
                                            + (monthOfYear + 1) + "/" + year);

                                }
                            }, mYear, mMonth, mDay);
                    datePickerDialog.show();
                }
            });
            tpFlightTime.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // Use the current time as the default values for the picker
                    final Calendar c = Calendar.getInstance();
                    int hour = c.get(Calendar.HOUR_OF_DAY);
                    int minute = c.get(Calendar.MINUTE);
                    // Create a new instance of TimePickerDialog
                    timePickerDialog = new TimePickerDialog(frmFlightDetails.this, new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                            tpFlightTime.setText( selectedHour + ":" + selectedMinute);
                        }
                    }, hour, minute, true);//Yes 24 hour time
                    timePickerDialog.setTitle("Select Time");
                    timePickerDialog.show();
                }
            });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.