我有一個 EditText 和一個用于 DatePickerFragment 的按鈕,但顯示 DatePickerDialog 和 OnCreateDialog 方法的語法不正確。
這是一個片段,其中我有一個 TextInputLayout/EditText 可以在單擊時訪問以顯示 DatePickerDialog。這是我的代碼,但 ShowDialog() 是錯誤的,并且提示 ShowsDialog() 這也是一個錯誤。
OnCreateDialog 錯誤顯示“CS0115:'AddEventFragment.OnCreateDialog(int)':找不到合適的方法來覆寫
namespace AdamsonsEDApp.Fragments
{
public class AddEventFragment : Android.Support.V4.App.DialogFragment, Android.App.DatePickerDialog.IOnDateSetListener
{
private int year, month, day;
TextInputLayout eventdatesetTextt;
Button eventpickdateButton;
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your fragment here
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.newevent, container, false);
this.Dialog.SetCanceledOnTouchOutside(false);
eventdatesetText = (TextInputLayout)view.FindViewById(Resource.Id.eventdatesetText)
eventpickdateButton = (Button)view.FindViewById(Resource.Id.eventpickdateButton);
eventpickdateButton.Click = EventpickdateButton_Click;
return view;
}
private void EventpickdateButton_Click(object sender, EventArgs e)
{
int DatePickerDialogID = 1;
ShowDialog(DatePickerDialogID);
}
public override Dialog OnCreateDialog(int id)
{
if (id == 1)
{
return new Android.App.DatePickerDialog(this.Activity, this, year, month, day);
}
return null;
}
public void OnDateSet(DatePicker view, int year, int month, int dayOfMonth)
{
this.year = year;
this.month = month;
this.day = dayOfMonth;
eventdatesetText.EditText.Text = year "/" month "/" dayOfMonth;
}
對于我嘗試的點擊事件:
private void EventpickdateButton_Click(object sender, EventArgs e)
{
int DatePickerDialogID = 1;
**this.Activity.ShowDialog(DatePickerDialogID);**
}
它沒有錯誤,但它說這個this.Activity.ShowDialog(DatePickerDialogID) ; 已過時:'已棄用'
從 Fragment 呼叫 DatePickerDialog 時正確的語法是什么?謝謝你。
uj5u.com熱心網友回復:
你可以參考這個檔案。我測驗了官方檔案提供的代碼,也有很多obsolete問題。但是,您可以添加屬性和其他內容來修復它。
這是更改后的代碼:
[Obsolete]
public class DatePickerFragment : DialogFragment,
DatePickerDialog.IOnDateSetListener
{
// TAG can be any string of your choice.
public static readonly string TAG = "X:" typeof(DatePickerFragment).Name.ToUpper();
// Initialize this value to prevent NullReferenceExceptions.
Action<DateTime> _dateSelectedHandler = delegate { };
public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
{
DatePickerFragment frag = new DatePickerFragment();
frag._dateSelectedHandler = onDateSelected;
return frag;
}
[Obsolete]
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
DateTime currently = DateTime.Now;
DatePickerDialog dialog = new DatePickerDialog(Activity,
this,
currently.Year,
currently.Month - 1,
currently.Day);
return dialog;
}
public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
// Note: monthOfYear is a value between 0 and 11, not 1 and 12!
DateTime selectedDate = new DateTime(year, monthOfYear 1, dayOfMonth);
Log.Debug(TAG, selectedDate.ToLongDateString());
_dateSelectedHandler(selectedDate);
}
}
主要活動.cs:
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
TextView _dateDisplay;
Button _dateSelectButton;
[Obsolete]
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
protected override void OnCreate(Bundle savedInstanceState)
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
_dateDisplay = FindViewById<TextView>(Resource.Id.date_display);
_dateSelectButton = FindViewById<Button>(Resource.Id.date_select_button);
_dateSelectButton.Click = _dateSelectButton_Click;
}
[Obsolete]
private void _dateSelectButton_Click(object sender, EventArgs e)
{
DatePickerFragment frag = DatePickerFragment.NewInstance(delegate (DateTime time)
{
_dateDisplay.Text = time.ToLongDateString();
});
frag.Show(FragmentManager, DatePickerFragment.TAG);
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
希望對您有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/534643.html
