Metni Düzenle'yi tıklatarak TimePicker İletişim Kutusu


106

Zaten bir DatePicker var, kullanıcı EditText alanını tıkladığında açılan

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();
            }
        });

Benzer şekilde bir TimePicker yapmayı denedim, ancak çalışmasını sağlayamadım. Bu benim onu ​​çalıştırma girişimim

 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 için yaptığım gibi yapmak imkansız mı?

Bu kodla EditText alanına tıklandığında bir TimePicker penceresi açmayı bile denedim.

      eReminderTime.setOnClickListener(new OnClickListener() {

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

Bazı nedenlerden dolayı bunu Android Studio'ya girdiğimde 'showDialog' puan aldı.

Biri bana nerede yanlış yaptığım konusunda ipucu verebilir mi? Yoksa bir Özel DialogFragment kullanmam mı gerekecek?


İkinci kod bloğunuzda gerçekte ne çalışmıyor? Görünmüyor mu, derlenmiyor mu?
Robadob

"" Ve selectedHour arasında setText kısmında bir hata gösterir, a ',' veya a ')' gerekli olduğunu söyler ancak bir 'koyduğumda,' setText (java.lang.String, java) .lang.String) "
Mark O'Sullivan

Yanıtlar:


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

Sizin Eksik +arasında ""ve seçilen saat, setTexttüm parçaları (ilk tırnak muhtemelen gereksizdir) bitiştirmek gerekir böylece yöntemleri yalnızca tek bir dize alır.

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();

        }
    });

Bu, ikinci hatanızı düzeltmeli, son parametreyi sağlamıyordunuz. TimePickerDialog Oluşturucuları


Bunu denedim ve daha önce denedim çünkü bu mesajı daha önce aldım. Artık 'new TimePickerDialog'dan sonra ve' mTimePicker.setTitle'den önce her şeyde bir hata gösteriyor. Hata, 'Yapıcı çözümlenemiyor' TimePickerDialog (com.appname.classname, android.app.TimePickerDialog.OnTimeSetListener, int, int) ''
Mark O'Sullivan

2
Android belgelerini kontrol ederseniz, iletişim kutusunun 24 saat olup olmadığını belirten son bir boole parametresi eklemeniz gerekir. TimePickerDialog (Bağlam bağlamı, TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)
Robadob

True / false boolean'ı tamamen unutmuşum, daha önce görmüştüm, ancak kodumu tarih seçiciye benzer bir şeye değiştirdiğimde onu eklemeyi unutmuşum. Yardımınız için teşekkürler!
Mark O'Sullivan

3
Harika teşekkürler. Muhtemelen dakikaları da biçimlendirmek isteyeceksiniz: eReminderTime.setText (selectedHour + ":" + String.format ("% 02d", selectedMinute));
Stephen Paul

Umarım daha faydalı ve tekrar kullanılabilir olur -> TimePickerUniversal
Pratik Butani

27

Neden yeniden kullanılabilir bir şekilde yazmıyorsunuz?

SetTime sınıfı oluşturun:

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

    }

Ardından onCreate işlevinden çağırın:

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

ÖÖ / ÖS nasıl alınır?
Pratik Butani

10

Aşağıdaki kodu, edittext'in onclick dinleyicisinde kullanabilirsiniz.

  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();

Tam kodu Android zaman seçici örneğinde görebilirsiniz


3

@Sumoanand'ın güzel yeniden kullanılabilir çözümünü, zamanı birden çok kez değiştirirken hem odak değişikliğini hem de tıklama dinleyicilerini desteklemek için genişlettim. Ayrıca son seçilen saati ve SS: mm biçimlendirmesini hatırlamak için seçici takvimi güncelleme

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'den kullanım:

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

Çözümünüz için teşekkür ederiz :) AM / PM ile kullanmak için düzenledim. Buraya göz atın: AM / PM ile / PM olmadan TimePicker
Pratik Butani

2

Bunun senin için işe yarayıp yaramayacağını bilmiyorum, benim için iyi çalışıyor.

Tarih / Saat seçici iletişim kutusu için bir yöntem oluşturun.

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());
    }
};

ve sonra, nerede istersen bunu aynen böyle yapabilirsin

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();
}

Umarım bunu çözümünüz olarak bulursunuz.


"// Bir iptal düğmesi oluştur [...]" ve "datePicker.setCancelable (false);" satırlarını beğendim. hue hue hue
MojioMS

Bu sorunun soruyla ilgili olmadığını düşünüyorum.
Pratik Butani

1

'E son argümanı koymadınız TimePickerDialog.

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

bu TimePickerclass,. mantıksal bir argüman gerektiriris24HourView


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
Lütfen sadece kod göndermeyin; kodunuzun ne yaptığını ve neden OP'nin problemini çözdüğünü açıklayın.
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();
    }
}

Yalnızca bu kodun yanıtıyla ilgili bazı ek bilgiler muhtemelen yararlı olacaktır.
Pyves

0

Zamanlayıcı iletişim kutusu için dpFlightDate düzenleme metnine birden fazla kez tıklarsam iletişim kutusu birden fazla görünür. bu iletişim kutusunun yalnızca bir kez görüntülenmesini nasıl önleyebilirim ve kullanıcı 2. kez tıklarsa iletişim kutusu tekrar görünmemelidir, yani iletişim kutusu ekranda ise?

          // 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();
                }
            });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.