我创建了一个简单的应用程序,有3个tab tab1,tab2,tab3
当我选择tab1时,相邻的tab2将加载到内存中,然后当我按下tab2或tab3时,tab2上的内容将不会刷新。
如果我在序列tab1->tab2->tab1->tab2中单击tab,我的片段将不会刷新
每次选择选项卡时都要加载选定的选项卡。
我使用以下代码将片段加载到选定的选项卡上

public class SampleFragmentPageAdapter extends FragmentStatePagerAdapter {

final int PAGE_COUNT = 3;
private String tabTitles[] = new String[]{"HOME", "BEACON", "NEARBY"};
private int[] imageResId = {
        R.drawable.home,
        R.drawable.beacon,
        R.drawable.nearby
};
private Context context;

public SampleFragmentPageAdapter(FragmentManager fm, Context context) {
    super(fm);
    this.context = context;
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    if (position == 0)
        fragment = new FragmentTab1();
    if (position == 1)
        fragment = new FragmentTab2();
    if (position == 2)
        fragment = new FragmentTab3();
    return fragment;
}

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

@Override
public CharSequence getPageTitle(int position) {
    // Generate title based on item position
    Drawable image = context.getResources().getDrawable(imageResId[position]);
    image.setBounds(0, 0, 32, 32);
    // Replace blank spaces with image icon
    SpannableString sb = new SpannableString("   " + tabTitles[position]);
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return sb;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    return super.instantiateItem(container, position);
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    super.destroyItem(container, position, object);
}
}

最佳答案

碎片页雷达:
fragmentpageradapter将整个片段存储在内存中,如果在viewpager中使用大量片段,可能会增加内存开销。
碎片状态页雷达页:
FragmentStatePageRadapter只存储碎片的SavedInstanceState,并在所有碎片失去焦点时销毁它们。因此,当我们必须使用动态片段(如带有小部件的片段)时,应该使用fragmentstatepageradapter,因为它们的数据可以存储在savedinstancestate中
用例:
当我们需要将整个片段存储在内存中时,应该使用fragmentpageradapter。当我说整个片段都保存在内存中时,这意味着它的实例不会被破坏,并且会产生内存开销。因此,建议只有当viewpager的片段数量较少时才使用fragmentpageradapter。如果片段是静态的,那就更好了,因为它们不会有大量的对象来存储其实例。
在您的情况下,如果您使用ListView、RecyclerView或任何繁重的工作,则应使用“FragmentStatePageRadapter”或“FragmentPageRadapter”

关于android - 选择选项卡时如何重新加载 fragment ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32224474/

10-12 02:47