【发布时间】:2015-01-31 14:37:59
【问题描述】:
我有一个带有 5 个选项卡的 viewpager,如果我转到第 5 个片段(即当我单击第 5 个选项卡或滑动到第 5 个选项卡时加载的片段),然后我转到第 3 个选项卡,第 5 个片段将不会' t 加载视图,如果我转到第 2 或第 1 个选项卡,则第 4 和第 5 个选项卡不会。我尝试更改 viewpager.offscreenlimit(3) 甚至 5 都没有结果。如果它可以帮助任何人弄清楚它,那么无论我用什么片段代替第 3、4 和 5 位,它都会发生。此外,第一次 viewpager 更改需要一段时间,大约 1.5 秒。
这是我的代码
mport android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;
import java.util.List;
public class AppSectionsPagerAdapter extends FragmentStatePagerAdapter
{
private static String[] fragmentNames = { "Example0", "Example1", "Example2","Example3","Example4"};
private FragmentManager fragmentManager = null;
private List<Fragment> fragments=null;
Fragment example0;
Fragment example1;
Fragment example2;
Fragment example3;
Fragment example4;
int numFragments;
int errorcode;
public AppSectionsPagerAdapter(FragmentManager fm)
{
super(fm);
numFragments = 5;
this.fragmentManager = fm;
example0 = new ListFragment();
example1 = new ListFragment();
example2 = new ListFragment();
example3 = new Fragment();
example4 = new Fragment();
}
@Override
public Fragment getItem(int i)
{
switch (i)
{
case 0:
return example0;
case 1:
return example1;
case 2:
return example2;
case 3:
return example3;
case 4:
return example4;
default:
Fragment frag = new Error_Fragment();
Bundle args = new Bundle();
errorcode = -5;
//args.putInt(errorcode, i + 1);
frag.setArguments(args);
return frag;
}
}
@Override
public int getCount()
{
return numFragments;
}
@Override
public CharSequence getPageTitle(int position)
{
return fragmentNames[position];
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object)
{
super.setPrimaryItem(container,0,object);
}
@Override
public void notifyDataSetChanged()
{
super.notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view)
{
fragmentManager.executePendingTransactions();
//fragmentManager.saveFragmentInstanceState(fragments.get(position));
}
}
【问题讨论】:
-
我首先要摆脱
destroyItem()、notifyDataSetChanged()和setPrimaryItem()。然后,我会将超类更改为FragmentPagerAdapter,因为只有五页,你不需要FragmentStatePagerAdapter。此外,如果您在getItem()中按需创建片段,而不是预先创建它们,您将获得更好的性能。如果这些都没有帮助,您需要更详细地解释“不再加载视图”的含义。 -
感谢您的发帖。我确实尝试了你所有的建议,但仍然没有。我开始怀疑这可能是内存问题,所以我将 onlowmemory 回调放入并禁用在我的列表视图中显示这些图像,因为我得到了 android studio 示例代码来处理基本字符串列表视图,我我猜是这些图像使用了大量内存。我会告诉你的
-
通常,当内存不足时,您会遇到更具体的问题,例如
OutOfMemoryError崩溃。我不知道这些图片来自哪里,但如果它们来自磁盘或网络,我强烈建议使用图片加载库,例如 Picasso 或 Universal Image Loader。 -
目前它们只是在可绘制对象中,但我绝对希望最终通过网络完成它,如果需要的话,我将完全检查 picasso 和 uil,如果不写我自己的。
-
我停止了所有图片的加载,但问题仍然存在。还将每个 switch case 设置为返回相同的片段,但仍然存在问题。这样就排除了导致问题的特定片段或寻呼机适配器,因为我使用的寻呼机适配器与 android studio 示例程序相同。
标签: android android-fragments android-viewpager android-fragmentactivity fragmentstatepageradapter