У меня есть родительский диалог DialogFragment под названием TheParent и дочерний фрагмент под названием TheChild, который расширяет TheParent.Вызов newInstance() при создании дочернего фрагмента, расширяющего родительский фрагмент
Однако, мне нужно, чтобы иметь возможность инициализировать некоторые переменные в TheParent хотя я инстанцировании TheChild, так что я попытался было:
В родителю
public static TheParent newInstance(int myInt) {
Bundle args = new Bundle();
TheParent fragment = new TheParent();
args.putInt(ARGUMENT_MYINT, myInt);
fragment.setArguments(args);
return fragment;
}
, а затем в ребенке:
public static TheChild newInstance(int myInt) {
return super.newInstance(myInt);
}
Однако мне не нравится, что я делаю это из-за статического контекста.
Каков правильный способ вызова newInstance() в TheChild и вызвать ли он newInstance() родителя?
Итак, как правильно объявить/настроить ребенка, если родитель требует аргумента для настройки? Родитель нуждается в myInt –
Поместите код инициализации в родительский класс в частный конструктор, который принимает int. Затем вызовите этот конструктор из TheParent.newInstance и передайте его myInt. В классе TheChild вам понадобится конструктор, который также принимает int и вызовы super (myInt), который является создателем-родителем, который вы только что создали, и в TheChild.newInstance вы вызовете этот конструктор в TheChild и передадите его myInt. Таким образом, как дочерний, так и родительский будут запускать код инициализации родителей, а фрагмент, созданный в TheChild, будет иметь тип TheChild, а не TheParent. –