java - 其中一个片段无法立即更新来自其他片段的数据
问题描述
有顶部有四个选项卡的片段。每个选项卡都有自己的片段。我使用第一个、第二个、第三个选项卡的片段来收集保存在我的 SharedPreferences 的数据,并在第四个选项卡中接收它。
切换第四页时,我希望看到我从其他片段中选择的信息。我的问题是只有第一个选项卡可以立即将数据传递到第四页,无论我保存什么,它都可以立即显示在第四页,这就是我想要的。
然而,其他人很奇怪
我需要多一步才能切换到第一个选项卡,它甚至可以将我的数据从其他选项卡更新到第四页。
我的代码或订单有什么问题导致这种情况发生?
public class UserActivityMenuFragment extends Fragment {
public static final String[] sTitle = new String[]{"first","second","third","fourth"};
@Nullable
@Override
public 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) {
}
});
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
我的适配器
public class UserActivityMenuAdapter extends FragmentStatePagerAdapter {
private List<Fragment> mFragments ;
private List<String> mTitles ;
public UserActivityMenuAdapter
(FragmentManager fm, List<Fragment> fragments, List<String> titles) {
super(fm);
mFragments = fragments;
mTitles = titles;
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments == null ?0:mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mTitles.get(position);
}
}
解决方案
ViewPager
不会一次创建所有页面。您可以使用以下代码段强制它同时维护所有片段:
mViewPager.setOffscreenPageLimit(4);
推荐阅读
- javascript - 如何在Jquery中将文本附加到左侧而不是添加到右侧
- sql - 如何选择一组预定义的值及其计数?
- alteryx - 如何将 Alteryx .yxzp 文件解包到较低版本
- wpf - 如何使用 MVVM 模型从 WPF 中的 CheckListBox 中绑定选中/选定项目(我正在使用“WPFToolkit.Extended.dll”来获取 CheckListBox 控件)
- c# - 如何在 C# 的同一个构造函数中初始化同一个类
- terraform - 使用 terraform 在 for_each 嵌套资源中循环
- php - 使用 WordPress 插件中的目录在 URL 上生成自定义输出
- ios - 如何在 UIViewControllerRepresentable Struct 中创建 UIBarButtonItem?
- javascript - 如何在 keyCode 导航的输入中设置自动焦点?
- angular - 角度异步验证器错误未显示