Я понял это. Довольно просто на самом деле. Для передачи данных во фрагмент вы используете связку. Я изменил вызов фрагмента, чтобы добавить пакет, содержащий начальную дату, следующим образом:
dob.Click += (sender, e) =>
{
Bundle bundlee = new Bundle();
bundlee.PutString("initDate", dob.Text);
DatePickerFragment frag = DatePickerFragment.NewInstance(delegate (DateTime time)
{
string thedate = time.ToShortDateString();
if (Utils.Mid(thedate,2,1) == "/")
{
thedate = "0" + thedate;
}
dob.Text = thedate;
});
frag.Arguments = bundlee;
frag.Show(SupportFragmentManager, DatePickerFragment.TAG);
};
Затем в методе фрагмента OnCreateDialog
я получаю данные из пакета и устанавливаю начальную дату средство выбора даты, вот так:
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
Bundle bundlee = this.Arguments;
int month = DateTime.Now.Month;
int day = DateTime.Now.Day;
int year = DateTime.Now.Year;
string initDate = bundlee.GetString("initDate");
if (initDate != "" && initDate != null)
{
month = Convert.ToInt32(Utils.Mid(initDate, 1, 2));
day = Convert.ToInt32(Utils.Mid(initDate, 4, 2));
year = Convert.ToInt32(Utils.Mid(initDate, 7, 4));
}
//DateTime currently = DateTime.Now;
DatePickerDialog dialog = new DatePickerDialog(Activity,
this,
year,
month - 1,
day);
return dialog;
}
Будучи программистом VB на протяжении всей жизни, начиная с VB4, я просто не мог обойтись без функции Mid
, поэтому я создал эквивалент в c# и поместил его в моем классе Utils
(на случай, если вам интересно, откуда это):
class Utils
{
public static string Mid(string input, int index, char newChar)
{
if (input == null)
{
throw new ArgumentNullException("input");
}
char[] chars = input.ToCharArray();
chars[index - 1] = newChar;
return new string(chars);
}
public static string Mid(string s, int a, int b)
{
string temp = s.Substring(a - 1, b);
return temp;
}
}