构造函数TimePickerDialog未定义

时间:2014-04-18 14:55:27

标签: android dialog

我想使用timePickerDialog开发简单的警报应用程序。问题是extends fragment上的构造函数TimePickerDialog未定义。

我该怎么办?有什么建议吗?

请帮帮我。谢谢你的关心。

以下是代码的一部分。

   public class ReminderFragment extends Fragment {

   @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_reminder, container, false);

    textAlarmPrompt = (TextView) v.findViewById(R.id.alarmprompt);

    buttonstartSetDialog = (Button) v.findViewById(R.id.startSetDialog);
    buttonstartSetDialog.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            textAlarmPrompt.setText("");
            openTimePickerDialog(false);

        }});
     return v;
   }

   private void openTimePickerDialog(boolean is24r){
    Calendar calendar = Calendar.getInstance();

    timePickerDialog = new TimePickerDialog(
            ReminderFragment.this, 
            onTimeSetListener, 
            calendar.get(Calendar.HOUR_OF_DAY), 
            calendar.get(Calendar.MINUTE), 
            is24r);
    timePickerDialog.setTitle("Set Alarm Time");  

    timePickerDialog.show();

        }

     OnTimeSetListener onTimeSetListener= new OnTimeSetListener(){

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

        Calendar calNow = Calendar.getInstance();
        Calendar calSet = (Calendar) calNow.clone();

        calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calSet.set(Calendar.MINUTE, minute);
        calSet.set(Calendar.SECOND, 0);
        calSet.set(Calendar.MILLISECOND, 0);

        if(calSet.compareTo(calNow) <= 0){
            //Today Set time passed, count to tomorrow
            calSet.add(Calendar.DATE, 1);
        }

        setAlarm(calSet);
    }};
   }

2 个答案:

答案 0 :(得分:1)

Fragment不是有效Context。请改用getActivity()

timePickerDialog = new TimePickerDialog(
    getActivity(), 
    onTimeSetListener, 
    calendar.get(Calendar.HOUR_OF_DAY), 
    calendar.get(Calendar.MINUTE), 
    is24r);

答案 1 :(得分:1)

使用getActivity()代替此ReminderFragment.this。第一个参数是上下文ReminderFragment.this是指ReminderFragmentgetActivity()返回此片段与之关联的活动。

 timePickerDialog = new TimePickerDialog(
        getActivity(), 
        onTimeSetListener, 
        calendar.get(Calendar.HOUR_OF_DAY), 
        calendar.get(Calendar.MINUTE), 
        is24r);