Отображать timerpickerdialog во фрагменте с помощью Xamarin Android

#c# #android #xamarin #fragment #timepickerdialog

#c# #Android #xamarin #фрагмент #timepickerdialog

Вопрос:

Я перешел по ссылке на руководство по xamarin Timepicker, чтобы создать Timepickerdialog внутри Activity . Это отлично работает.

Мне нужно сделать то же самое в fragment , но не удалось заставить его работать. Может кто-нибудь, пожалуйста, показать мне, как это сделать, используя фрагмент? Какие-либо гильдейские линии, ссылки или советы.

Я использую Xamarin Andriod . Заранее благодарю.

main.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">
<TextView android:id="@ id/timeDisplay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""/>
<Button android:id="@ id/pickTime"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Change the time"/>
</LinearLayout>
  

MainActivity.cs

 private TextView time_display;
private Button pick_button;    
private int hour;
private int minute;    
const int TIME_DIALOG_ID = 0;

protected override void OnCreate (Bundle bundle)
{
        base.OnCreate (bundle);

        // Set our view from the "Main" layout resource
        SetContentView (Resource.Layout.Main);

        // Capture our View elements
        time_display = FindViewById<TextView> (Resource.Id.timeDisplay);
        pick_button = FindViewById<Button> (Resource.Id.pickTime);

        // Add a click listener to the button
        pick_button.Click  = (o, e) => ShowDialog (TIME_DIALOG_ID);

        // Get the current time
        hour = DateTime.Now.Hour;
        minute = DateTime.Now.Minute;

        // Display the current date
        UpdateDisplay ();
}

// Updates the time we display in the TextView
private void UpdateDisplay ()
{
        string time = string.Format ("{0}:{1}", hour, minute.ToString ().PadLeft (2, '0'));
        time_display.Text = time;
}

private void TimePickerCallback (object sender, TimePickerDialog.TimeSetEventArgs e)
{
        hour = e.HourOfDay;
        minute = e.Minute;
        UpdateDisplay ();
}

protected override Dialog OnCreateDialog (int id)
{
        if (id == TIME_DIALOG_ID)
                return new TimePickerDialog (this, TimePickerCallback, hour, minute, false);

        return null;
}
  

Fragment.cs

 //Everything same as Activity
//updated the following:

time_display = view.FindViewById<TextView>(Resource.Id.timeDisplay);
pick_button = view.FindViewById<Button>(Resource.Id.pickTime);

protected override Dialog OnCreateDialog(int id)
{
    if (id == TIME_DIALOG_ID)
        return new TimePickerDialog(this.Activity, TimePickerCallback, hour, minute, false);

    return null;
}
  

Результат:

Ошибка 1. Имя ‘ShowDialog’ не существует в текущем контексте.

Ошибка 2.Фрагментация.onCreateDialog(int)’: не найден подходящий метод для переопределения.

Комментарии:

1. можете ли вы опубликовать свой код фрагмента, который вы пробовали, это действие, которое вы скопировали из руководства.

2. Действие и фрагмент — это одно и то же. Вы можете использовать те же коды для фрагмента. Вместо «этого» попробуйте «это». Активность».

3. @Hari_krish4. Я обновил вопрос и добавил this.activity и view.FindViewbyId , но получил сообщение об ошибке.

Ответ №1:

Попробуйте этот набор кода, чтобы отобразить TimePickerDialog.

 TimePickerDialog timePickerDialog = new TimePickerDialog(this.Activity, TimePickerCallback, hour, minute, false);
                timePickerDialog.Show();
  

Комментарии:

1. Спасибо. Мне пришлось удалить метод переопределения onCreateDialog. И добавляйте свой код при нажатии кнопки.