Android:如何更新刷卡视图中的缓存片段?

问题描述:

我已经在我的应用中实施了滑动视图。该适配器是一个FragmentStatePagerAdapter。滑动视图片段中的内容可能会相互影响。Android:如何更新刷卡视图中的缓存片段?

问题: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不返回相应的片段,但父活动。

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

+0

ViewPager.setOffscreenPageLimit(0)不工作,因为离屏页的最小值为1。 – Sevle

+0

[这](http://*.com/questions/26359308/refresh-fragment-in-viewpager-using- fragmentstatepageradapter)可以帮助你 – Sevle

我的印象是,我不应该尝试更新缓存片段。我认为这样做会更容易些,如果这样做是要完成的话。

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