我创建了一个简单的应用程序,有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/