[英]One of the fragments can’t immediately update data from other fragments
片段頂部有四個選項卡。 每個選項卡都有自己的片段。 我使用第一,第二,第三選項卡的片段來收集保存在我的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);
FragmentStatePagerAdapter不保存任何Fragment實例,而是保存它們的savedInstanceState。
如果一個Fragment(page)不可見,則其實例將保持銷毀狀態,直到再次可見為止,然后從saveInstanceState重新創建。
如果要使所有片段保持活動狀態,請使用FragmentPagerAdapter而不是FragmentStatePagerAdapter。
參見官方文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.