在片段中显示时间/日期对话框,导致GetSupportFragment()错误

时间:2015-11-06 00:55:44

标签: android datepicker datetimepicker timepicker

遇到当前代码的问题,使用谷歌指南的时间/日期选择器片段类。 show方法不起作用。我的错误在show方法中。

newfragment ..(..getsupportfragmentmanager ...)我没有所有的代码atm在工作休息时写这个,所以我不会忘记。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

我找到了那些有 getSupportFragmentManager()错误的人的答案。

更改指向......

<强> getFragmentManager()

然后

确保您的导入显示此

导入android.support.v4.app.DialogFragment;

你应该好好去!

您现在可以显示时间/日期选择器对话框 WITHIN a FRAGMENT

更新 - 编辑

这个答案适用于片段。我已经从使用片段转移到我的应用程序的更大目的。对于那些希望将其用于活动的人。我能够轻松地完成这项工作。

这可以用于将日期/时间设置为 TextViews 按钮

您可以在任何实例中使用以下内容在任何活动中传递给TextView或Button后获取字符串。通过应用 getActivity(),然后继续:

YOURTEXTVIEW.getText().toString();

YOURBUTTON.getText().toString();

将正确的日期/时间设置为所需的TextView或按钮。

<强>日期选择器

public class DatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener{

    public static String TAG = DatePicker.class.getSimpleName();


    public Calendar c = Calendar.getInstance();


    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);

    }


    @Override
    public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        String date = new SimpleDateFormat("MMM, dd, yyyy", Locale.ENGLISH)
                .format(new Date(year-1900,monthOfYear,dayOfMonth));
        Button rdb = (Button)getActivity().findViewById(R.id.Request_Button_Date);
        rdb.setText(date);
    }
}

您需要中减去 1900,如上面的代码所示,以收集准确的正确的年份值。

<强> TimePicker

public class TimePicker extends DialogFragment implements TimePickerDialog.OnTimeSetListener{

    public static String TAG = TimePicker.class.getSimpleName();


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in 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 DatePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));

    }

    @Override
    public void onTimeSet(android.widget.TimePicker view, int hourOfDay, int minute) {
        Time t = new Time(hourOfDay,minute,0);//seconds by default set to zero
        Format formatter;
        formatter = new SimpleDateFormat("h:mm a", Locale.ENGLISH);
        String time = formatter.format(t);
        Button rtb = (Button)getActivity().findViewById(R.id.Request_Button_Time);
        rtb.setText(time);
    }
}

注意上下文是如何 getActivity(),而OnDateSetListener CallBack是这个。这确保了为此调用正确的上下文和回调。在我的例子中,我需要在这个片段中发生回调。

你去吧。你应该全部设置:)