2013-07-27 143 views
67

我已經有了當在現場的EditText用戶點擊TimePicker從對話框點擊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(); 
      } 
     }); 

我試圖做類似的方式TimePicker會彈出一個datepicker,但無法得到它加工。這是我試圖讓它工作

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'被記錄下來。

任何人都可以給我提示我要去哪裏錯了嗎?或者我只需要使用自定義DialogFragment?

+0

看到完整的代碼有什麼不實際工作中你的第二個代碼塊?它是不是出現,它不會編譯? – Robadob

+0

在「」和selectedHour之間的setText部分顯示一個錯誤,表示需要一個','或一個')',但是當我放一個','它說「無法解析方法'setText(java.lang.String, java.lang.String)「 –

回答

156
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 Constructors

+0

試過,並認爲我可能之前嘗試過,因爲我之前得到這個消息。現在在'new TimePickerDialog'之後和'mTimePicker.setTitle'之前顯示錯誤。錯誤是'無法解析構造函數'TimePickerDialog(com.appname.classname,android.app.TimePickerDialog.OnTimeSetListener,int,int)'' –

+1

如果您檢查了android文檔,您需要添加一個最終布爾參數來說明對話框是24小時或不。 TimePickerDialog(上下文上下文,TimePickerDialog.OnTimeSetListener callBack,int hourOfDay,int minute,boolean is24HourView) – Robadob

+0

完全忘記了true/false布爾值,發現早些時候忘記包含它,當我將代碼更改爲類似日期選擇器。謝謝你的幫助! –

21

爲什麼不以可重複使用的方式寫入?

創建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); 
4

我不知道這是否會爲你工作,這對我的作品就好了。

爲日期/時間選取器對話框創建方法。

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

希望你覺得這是你的解決方案。

+0

我喜歡兩行「//創建一個取消按鈕[...]」和「datePicker.setCancelable(false);」色調色調色調 – 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

請不要只是發佈代碼;解釋你的代碼在做什麼以及爲什麼它解決了OP的問題。 – dimo414

1

你還沒有把最後一個參數放在TimePickerDialog

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

這是TimePickerclass的代碼。它需要一個boolean參數is24HourView

5

您可以使用下面的代碼中的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(); 

的onclick聽衆可以在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

有關此代碼的其他信息只有答案可能會有所幫助。 – Pyves