为了账号安全,请及时绑定邮箱和手机立即绑定

其中一个片段不能立即更新其他片段的数据

其中一个片段不能立即更新其他片段的数据

跃然一笑 2021-10-06 10:51:56
有一个片段,上面有四个标签。每个选项卡都有自己的片段。我使用第一个、第二个、第三个选项卡的片段来收集保存在我的 SharedPreferences 中的数据,并在第四个选项卡中接收它。切换第四页时,我想看到我从其他片段中选择的信息。我的问题是只有第一个选项卡可以立即将数据传递到第四页,无论我保存什么,它都可以立即显示在第四页,这就是我想要的。然而,其他人很奇怪我需要再多一步切换到第一个选项卡,它甚至可以将我的数据从其他选项卡更新到第四页。我的代码或订单有什么问题导致这种情况发生?public class UserActivityMenuFragment extends Fragment {public static final String[] sTitle = new String[]{"first","second","third","fourth"};@Nullable@Overridepublic View onCreateView(@NonNull final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {    View view = inflater.inflate(R.layout.menu_activity,container ,false);    initView(view);    return view;}private void initView(View view) {    ViewPager mViewPager = view.findViewById(R.id.containerView);    TabLayout mTabLayout = view.findViewById(R.id.tabs);    mTabLayout.addTab(mTabLayout.newTab().setText(sTitle[0]));    mTabLayout.addTab(mTabLayout.newTab().setText(sTitle[1]));    mTabLayout.addTab(mTabLayout.newTab().setText(sTitle[2]));    mTabLayout.addTab(mTabLayout.newTab().setText(sTitle[3]));    mTabLayout.setupWithViewPager(mViewPager);    List<Fragment> fragments = new ArrayList<>();    fragments.add(FirstFragment.newInstance());    fragments.add(SecondFragment.newInstance());    fragments.add(ThirdFragment.newInstance());    fragments.add(FourthFragment.newInstance());    UserActivityMenuAdapter adapter = new UserActivityMenuAdapter(getChildFragmentManager(),fragments, Arrays.asList(sTitle));    mViewPager.setAdapter(adapter);    mViewPager.setOffscreenPageLimit(2);    mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {        @Override        public void onTabSelected(TabLayout.Tab tab) {        }        @Override        public void onTabUnselected(TabLayout.Tab tab) {        }        @Override        public void onTabReselected(TabLayout.Tab tab) {        }    });
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

FragmentStatePagerAdapter 不保存任何 Fragment 实例,而是保存它们的 savedInstanceState。

如果一个 Fragment(page) 不可见,它的实例将保持销毁状态,直到它再次可见,然后从savedInstanceState 重新创建。

如果您想让所有 Fragment 保持活动状态,请使用 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter。


查看完整回答
反对 回复 2021-10-06
?
HUX布斯

TA贡献1876条经验 获得超6个赞

ViewPager不会一次创建的所有页面。您可以使用以下代码段强制它同时维护所有片段:

mViewPager.setOffscreenPageLimit(4);


查看完整回答
反对 回复 2021-10-06
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信