【问题标题】:Fragment inside Viewpager not show when revisited重新访问时不显示 Viewpager 中的片段
【发布时间】:2020-04-11 01:34:26
【问题描述】:

我的 Activity 中有两个片段。一个包含一个viewpager,其中也有两个片段。一切正常,但问题是当我从另一个片段重新访问包含 viewpager 的片段时,viewpager 中的子片段永远不会显示。

这是包含视图页面的片段,MainHistoryFragment.java

public class MainHistoryFragment extends Fragment {


View view;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.activity_hist, container, false);


    return view;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getActivity(), getActivity().getSupportFragmentManager());
    ViewPager viewPager = view.findViewById(R.id.view_pager);
    viewPager.setAdapter(sectionsPagerAdapter);
    TabLayout tabs = view.findViewById(R.id.tabs);
    tabs.setupWithViewPager(viewPager);
    tabs.getTabAt(0).setIcon(android.R.drawable.ic_dialog_email);
    tabs.getTabAt(1).setIcon(android.R.drawable.ic_menu_compass);
}

}

这是 FragmentPagerAdapter 的子类,SectionsPagerAdapter

public class SectionsPagerAdapter extends FragmentPagerAdapter {

@StringRes
private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2};
private static final int totalTabs = 2;
private final Context mContext;

public SectionsPagerAdapter(Context context, FragmentManager fm) {
    super(fm);
    mContext = context;
}

@Override
public Fragment getItem(int position) {
    // getItem is called to instantiate the fragment for the given page.
    switch (++position){
        case 1:
            return new HistoryFragment();
        case 2:
            return new BookmarkFragment();
            default:
                return null;
    }
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return mContext.getResources().getString(TAB_TITLES[position]);
}

@Override
public int getCount() {
    return totalTabs;
}

}

我注意到 SectionsPagerAdapter 的 getItem() 方法在重新访问后永远不会被调用。 请问我如何让我的片段在重新访问后显示在 viewpager 中?

【问题讨论】:

    标签: android android-fragments android-viewpager fragment fragmentpageradapter


    【解决方案1】:

    改变这一行:

    SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getActivity(), getActivity().getSupportFragmentManager());
    

    到:

    SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getActivity(), getActivity().getChildFragmentManager());
    

    当您在片段中添加另一个片段时,您需要使用 getChildFragmentManager()。

    希望这会有所帮助!快乐编码!

    【讨论】:

      猜你喜欢
      • 2015-10-16
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多