Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin时间选择器片段对话框_C#_Android_Android Fragments_Xamarin_Android Timepicker - Fatal编程技术网

C# Xamarin时间选择器片段对话框

C# Xamarin时间选择器片段对话框,c#,android,android-fragments,xamarin,android-timepicker,C#,Android,Android Fragments,Xamarin,Android Timepicker,我正在用C开发一个Xamarin Android应用程序,我正在尝试实现一个时间选择器对话框,在这个对话框中,用户选择一个给定的时间,他们将每天或每周的几天收到通知 我知道有一个TimePickerDialog控件不推荐使用,我们现在需要使用一个片段对话框。如果有人能帮助我,我将非常感激 谢谢 您最好扩展DialogFragment并从中创建自己的TimePickerFragment。安卓甚至在这个主题上有一个完整的文档: 注意:您必须转换相应的Java->C,但这应该不是一个太大的问题 pub

我正在用C开发一个Xamarin Android应用程序,我正在尝试实现一个时间选择器对话框,在这个对话框中,用户选择一个给定的时间,他们将每天或每周的几天收到通知

我知道有一个TimePickerDialog控件不推荐使用,我们现在需要使用一个片段对话框。如果有人能帮助我,我将非常感激


谢谢

您最好扩展DialogFragment并从中创建自己的TimePickerFragment。安卓甚至在这个主题上有一个完整的文档:

注意:您必须转换相应的Java->C,但这应该不是一个太大的问题

public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListener
{
    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        Calendar c = Calendar.Instance;
        int hour = c.Get(CalendarField.HourOfDay);
        int minute = c.Get(CalendarField.Minute);
        return new TimePickerDialog(Activity, this, hour, minute, DateFormat.Is24HourFormat(Activity));
    }

    public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
    {
        //Do something when time chosen by user
    }
}

以下是项目的示例代码:

class TimePickerFragment : DialogFragment
{
    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        return new TimePickerDialog(Activity, (sender, args) =>
        {
            //args contains new time
        }, DateTime.Now.Hour, DateTime.Now.Minute, true);
    }
}

下面是我如何实现TimePickerDialog的示例

声明EditText控件您可以只使用TextView

EditText startTimeInput=FindViewBydResource.Id.newEventStartTimeInput

通过扩展DialogFragment和handle OnCreate和OnTimeSet方法来创建TimePickerFragment

//Time Picker
public class TimePickerFragment : DialogFragment, 
                          TimePickerDialog.IOnTimeSetListener
{
    // TAG can be any string of your choice.
    public static readonly string TAG = "Y:" + typeof(TimePickerFragment).Name.ToUpper();

    // Initialize this value to prevent NullReferenceExceptions.
    Action<TimeSpan> _timeSelectedHandler = delegate { };

    public static TimePickerFragment NewInstance(Action<TimeSpan> onTimeSet)
    {
        TimePickerFragment frag = new TimePickerFragment();
        frag._timeSelectedHandler = onTimeSet;
        return frag;
    }

    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        Calendar c = Calendar.Instance;
        int hour = c.Get(CalendarField.HourOfDay);
        int minute = c.Get(CalendarField.Minute);
        bool is24HourView = true;
        TimePickerDialog dialog = new TimePickerDialog(Activity,
                                                       this,
                                                       hour,
                                                       minute,
                                                       is24HourView);
        return dialog;
    }

    public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
    {
        //Do something when time chosen by user
        TimeSpan selectedTime = new TimeSpan(hourOfDay, minute, 00);
        Log.Debug(TAG, selectedTime.ToString());
        _timeSelectedHandler(selectedTime);
    }
}

希望这有帮助

谢谢乔治,请看我上面的评论。@Amitaros:你有什么问题?对不起,此代码已在COh中。我只是不太懂代码。有机会的时候我会试试的。捆绑是什么意思?谢谢。@Giorgi对于较新的开发人员,您可能应该参考MvxDialogFragment的来源。@JonDouglas:我以为问题是关于MvvmCross的,我将删除它。谢谢Jon。。我在编程方面不是很有经验,所以我真的不知道如何将其转换为C,尤其是Xamarin。我在他们的网站上找到了这个,但它只是一个日期选择器对话框,我没有成功地将它实现到一个时间选择器。任何帮助都将不胜感激。谢谢,谢谢!当我有机会的时候,我会尝试一下。@JonDouglas-我可以禁用小时时间选择器吗?
    private void StartTimeInput_Click(object sender, EventArgs e)
{
    TimePickerFragment frag = TimePickerFragment.NewInstance(delegate (TimeSpan time)
    {
        startTimeInput.Text = time.ToString();
    });
    frag.Show(FragmentManager, TimePickerFragment.TAG);
}