Эй, у меня есть действительно глупая проблема, и я не могу понять, почему она работает не так, как ожидалось. Поэтому у меня есть макет MultiFragment (у каждого есть несколько разных вопросов), используя viewpager и FragmentStatePagerAdapter. Когда я открываю экран, на котором размещаются все эти фрагменты, я пытаюсь восстановить предыдущее состояние (отмечая все ответы на вопросы) с помощью сетевого вызова. Однако кажется, что если мой фрагмент не отображается пользователю, он не может обновить проверенное состояние переключателя/флажков.
Кто-нибудь знает, что я могу сделать для достижения желаемого поведения?
Приветствия и благодарности заранее!
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
presenter.restoreAnswersFromPreviousSession(questionId);
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisible()) {
if (isVisibleToUser) {
presenter.restoreAnswersFromPreviousSession(questionId);
Log.d("Fit", "My Fragment is visible");
} else {
Log.d("Fit", "My Fragment is not visible");
}
}
}
Здесь я восстанавливаю состояние (вызывается после успешного запроса)
previousReplies = repliesToRestore;
for (QualityReportReply reportReply : repliesToRestore) {
int id = reportReply.id();
switch (id) {
case 201: {
boolean tooThin = (boolean) reportReply.value();
if (tooThin) {
materialTooThinGroupYes.setChecked(true);
} else {
materialTooThinGroupNo.setChecked(true);
}
break;
}
case 202: {
boolean tooThick = (boolean) reportReply.value();
if (tooThick) {
materialTooThickGroupYes.setChecked(true);
} else {
materialTooThickGroupNo.setChecked(true);
}
break;
}
case 203: {
boolean drawingThreads = (boolean) reportReply.value();
if (drawingThreads) {
materialDrawThreadsGroupYes.setChecked(true);
} else {
materialDrawThreadsGroupNo.setChecked(true);
}
break;
}
case 204: {
boolean flyingThreads = (boolean) reportReply.value();
if (flyingThreads) {
materialFlyingThreadsGroupYes.setChecked(true);
} else {
materialFlyingThreadsGroupNo.setChecked(true);
}
break;
}
case 205: {
boolean knots = (boolean) reportReply.value();
if (knots) {
materialKnotsGroupYes.setChecked(true);
} else {
materialKnotsGroupNo.setChecked(true);
}
break;
}