我已在我的应用中实现了滑动视图。适配器是FragmentStatePagerAdapter。滑动视图片段中的内容可能会相互影响。
问题:ViewPager将一个片段缓存到左侧,一个片段缓存到右侧。在一个片段中所做的更改不会反映在左侧和右侧的缓存片段中。只有在经过足够的滑动(以便碎片不再在缓存中并且必须重建)之后,变化才会变得可见。
我尝试使用
禁用此行为viewPager.setOffscreenPageLimit(0);
但那并没有奏效。这也可能会降低滑动性能。
我尝试的下一件事是覆盖片段中的onResume()来更新内容。但是,看起来,在滑动到该片段之前不会调用onResume()。
最后,我试过这个:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, position);
TextView text = (TextView) fragment.getView().findViewById(R.id.text);
text.setText("bla");
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
这会在片段上产生NullPointerException,因为instantiateItem不会返回相应的Fragment,而是返回父Activity。
现在,更新缓存片段的推荐方法是什么?
答案 0 :(得分:0)
我的印象是,我不应该尝试更新缓存的片段。我认为如果要做到这一点会更容易。
因此,我决定重构我的应用并将我想要修改的元素移动到父活动。片段现在只包含特定于一个片段的元素。无论如何,这可能是一个更清洁的设计。