Android:如何在滑动视图中更新缓存片段?

时间:2016-03-07 17:55:57

标签: android caching swipe

我已在我的应用中实现了滑动视图。适配器是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。

现在,更新缓存片段的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

我的印象是,我不应该尝试更新缓存的片段。我认为如果要做到这一点会更容易。

因此,我决定重构我的应用并将我想要修改的元素移动到父活动。片段现在只包含特定于一个片段的元素。无论如何,这可能是一个更清洁的设计。