2013-07-27 80 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