2013-07-27 10 views
67

ho già un DatePicker che si apre quando l'utente fa clic sul campo EditTextDialog TimePicker da cliccando EditText

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

ho provato a fare un TimePicker in modo simile, ma era in grado di farlo lavoro. Questo è il mio tentativo di farlo funzionare

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

      } 
     }); 

E 'impossibile farlo simile al modo in cui l'ho fatto per DatePicker?

Ho provato anche a creare un popup di TimePicker dopo aver fatto clic sul campo EditText con questo codice.

 eReminderTime.setOnClickListener(new OnClickListener() { 

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

Per qualche motivo, quando l'ho inserito in Android Studio, lo 'showDialog' è stato segnato.

Qualcuno può darmi consigli su dove sto andando male? O sto solo andando a usare un Custom DialogFragment?

+0

Che in realtà non funziona in il tuo secondo blocco di codice ?, semplicemente non appare, non viene compilato? – Robadob

+0

Mostra un errore nella parte setText tra "" e selectedHour, dice un ',' o un ')' è necessario ma quando inserisco un ',' dice "non può risolvere il metodo 'setText (java.lang.String, java.lang.String) " –

risposta

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

tuo manca un + tra "" e ora selezionata, setText metodi prendere solo una singola stringa, quindi è necessario per concatenare tutte le parti (le prime citazioni sono probabilmente inutili).

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

     } 
    }); 

Questo dovrebbe correggere il secondo errore, non stavi fornendo l'ultimo parametro. TimePickerDialog Constructors

+0

Ho provato quello e penso che potrei di provato quello prima perché ho ricevuto questo messaggio prima. Ora mostra un errore tutto dopo "new TimePickerDialog" e prima di "mTimePicker.setTitle". L'errore è 'Impossibile risolvere il costruttore' TimePickerDialog (com.appname.classname, android.app.TimePickerDialog.OnTimeSetListener, int, int) '' –

+1

Se si controlla la documentazione di Android, è necessario aggiungere un parametro booleano finale che indica se la finestra di dialogo è di 24 ore o meno. TimePickerDialog (Contesto contesto, TimePickerDialog.OnTimeSetListener callBack, intOnOggDay, int minuto, booleano is24HourView) – Robadob

+0

Completamente dimenticato del vero/falso booleano, visto in precedenza ma dimenticato di includerlo quando ho cambiato il mio codice in qualcosa di simile al selezionatore di date . Grazie per l'aiuto! –

21

Perché non scrivere in un modo riutilizzabile?

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

    } 

quindi chiamare da funzione onCreate:

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

Non so se questo funzionerà per voi, per me funziona bene.

Creare un metodo per la finestra di dialogo Selezione data/ora.

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

e poi, dove si vuole si può fare proprio come questo

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

Spero che troviate questo come la vostra soluzione.

+0

Mi piacciono le due linee "// Crea un pulsante Annulla [...]" e "datePicker.setCancelable (false);" hue hue hue – MojioMS

1
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); 
} 
+5

Si prega di non inserire solo il codice; spiega cosa sta facendo il tuo codice e perché risolve il problema dell'OP. – dimo414

1

Non hai messo l'ultimo argomento nella TimePickerDialog.

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

questo è il codice dello TimePickerclass.richiede un argomento booleano is24HourView

5

È possibile utilizzare il codice qui sotto nell'ascoltatore onclick di EditText

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

È possibile vedere il codice completo a Android timepicker example

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

Alcune informazioni aggiuntive su questa risposta al solo codice sarebbero probabilmente utili. – Pyves