Добро пожаловать в SO, Асаэль.
this
в этом месте / контексте относится к экземпляру DatePickerDialog.OnDateSetListener
, потому что именно там вы находитесь в точке выполнения;вам нужен Context
, а именно контекст, который может управлять темой (например, фрагмент или контекст действия), чтобы ваш диалог соответствовал вашей теме. OnDateSetListener
не является контекстом ...
Измените его, например:
val pickDate = DatePickerDialog(requireContext(), DatePickerDialog.OnDateSetListener...
Откуда берется requireContext ()?
Это происходит из Fragment
класса:
/**
* Return the {@link Context} this fragment is currently associated with.
*
* @throws IllegalStateException if not currently associated with a context.
* @see #getContext()
*/
@NonNull
public final Context requireContext() {
Context context = getContext();
if (context == null) {
throw new IllegalStateException("Fragment " + this + " not attached to a context.");
}
return context;
}
Как DateSetListener
может получить доступ к методу из фрагмента?
Это хитрый, но ваш DateSetListener()
анонимный экземпляр класса DateSetListener
и анонимные классы в java имеют прямой доступ к родительскому / содержащему класс. Вот почему вы можете позвонить requireContext()
из своего анонимного класса, содержащегося в Fragment
.
Если бы вы скопировали и вставили свой код в другой класс, класс, который не является фрагментом, вы получили бы ошибку компиляции (если ваш класс another
не имеет метод requireContext()
, то есть.
:)