【发布时间】:2017-09-01 02:01:59
【问题描述】:
嘿,我有一个非常愚蠢的问题,我不知道为什么它没有按预期工作。 所以我有一个使用 viewpager 和 FragmentStatePagerAdapter 的 MultiFragment 布局(每个都有一些不同的问题)。 当我打开包含所有这些片段的屏幕时,我正在尝试使用网络调用恢复以前的状态(标记所有已回答的问题)。 但是,如果我的 Fragment 对用户不可见,它似乎无法更新单选按钮/复选框的选中状态。
有人知道我可以做些什么来实现期望的行为吗?
提前干杯和感谢!
@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;
}
【问题讨论】:
-
您必须等待片段可见,然后更新按钮/复选框的检查状态。
-
我在这里添加了我的代码
-
问题是我需要在 onViewCreated 和变得可见时执行两次请求,因为每当用户输入新选项卡时我总是想显示最新状态,但它似乎不是在 viewpager 中的第一个片段上触发,并且由于我动态添加它们(仅 2 或 3 个)可以在某些时候添加我必须进行网络调用
-
所以你说 onViewCreated 没有被调用,或者你在每次滑动时调用 api(你不想要)?
-
我在描述中添加了一张图片,它显示了不想要的行为,这些字段以某种方式预先选择,但这不是我需要的正常检查状态,如果我设置
setChecked()和设置 this 的片段不可见
标签: android android-fragments android-viewpager radio-button