带有列表视图和 fragmentstatepageradapter 的 ViewPager
ViewPager with listviews and fragmentstatepageradapter
我有一个带有 5 个标签的 viewpager。在 viewpager 的每个片段中,我都有一个列表视图,其中填充了我从服务器获取的数据(服务器调用是使用 AsyncTask 完成的)。
我还使用 Fragmentstatepageradapter 来实现最流畅的导航,但是当我从一个具有列表视图的片段导航到另一个具有列表视图的片段时,似乎有些东西无法正常工作。
我想知道为什么,因为数据已经存储,我希望 viewpager 从堆栈中弹出这些片段。
这是我的适配器:
public class TabsPagerAdapter extends FragmentStatePagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
case 4:
return new Fragment5();
}
return null;
}
@Override
public int getCount() {
return 5;
}
}
经过一些研究,我发现 getItem() 应该总是 returns 片段的一个新实例,但我仍然无法 store/restore 顺利地状态。
我已经尝试使用 myViewPager.setOffscreenPageLimit(4);
来提供更好的性能,但标签导航仍然有点滞后。
我是否必须覆盖 instantiateItem/destroyItem 才能保存片段状态?
通过 将 ListView 的 layout_height 参数从 wrap_content 更改为 match_parent 解决了问题。
如果高度设置为wrap_content,适配器内部的getView方法将被多次调用,这就是标签之间导航缓慢的原因。
我希望这会对某人有所帮助,已找到答案 here。
我有一个带有 5 个标签的 viewpager。在 viewpager 的每个片段中,我都有一个列表视图,其中填充了我从服务器获取的数据(服务器调用是使用 AsyncTask 完成的)。
我还使用 Fragmentstatepageradapter 来实现最流畅的导航,但是当我从一个具有列表视图的片段导航到另一个具有列表视图的片段时,似乎有些东西无法正常工作。
我想知道为什么,因为数据已经存储,我希望 viewpager 从堆栈中弹出这些片段。
这是我的适配器:
public class TabsPagerAdapter extends FragmentStatePagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
case 4:
return new Fragment5();
}
return null;
}
@Override
public int getCount() {
return 5;
}
}
经过一些研究,我发现 getItem() 应该总是 returns 片段的一个新实例,但我仍然无法 store/restore 顺利地状态。
我已经尝试使用 myViewPager.setOffscreenPageLimit(4);
来提供更好的性能,但标签导航仍然有点滞后。
我是否必须覆盖 instantiateItem/destroyItem 才能保存片段状态?
通过 将 ListView 的 layout_height 参数从 wrap_content 更改为 match_parent 解决了问题。
如果高度设置为wrap_content,适配器内部的getView方法将被多次调用,这就是标签之间导航缓慢的原因。
我希望这会对某人有所帮助,已找到答案 here。