使用多个片段设置RadioButton.setChecked

dha*_*ich 13 android radio-button android-fragments android-viewpager

嘿,我有一个非常愚蠢的问题,我无法弄清楚为什么它没有按预期工作.所以我使用viewpager和FragmentStatePagerAdapter有一个MultiFragment布局(每个都有一些不同的问题).当我打开托管所有这些片段的屏幕时,我正在尝试使用网络呼叫恢复之前的状态(标记所有已回答的问题).但是,如果我的片段对用户不可见,它似乎无法更新单选按钮/复选框的已检查状态.

在此输入图像描述

有谁知道我能做些什么来实现所希望的行为?

欢呼并提前致谢!

 @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");
               }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我恢复状态(在请求成功后调用)

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;
    }
Run Code Online (Sandbox Code Playgroud)

Kis*_*ela 0

您需要使用setOffscreenPageLimit

viewPager.setOffscreenPageLimit(<total_page_count>);
Run Code Online (Sandbox Code Playgroud)

正如文件所说

设置在空闲状态下应保留在视图层次结构中当前页面任一侧的页面数。超出此限制的页面将在需要时从适配器重新创建。