2016-03-07 170 views
0

我已經在我的應用中實施了滑動視圖。該適配器是一個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://stackoverflow.com/questions/26359308/refresh-fragment-in-viewpager-using- fragmentstatepageradapter)可以幫助你 – Sevle

回答

0

我的印象是,我不應該嘗試更新緩存片段。我認爲這樣做會更容易些,如果這樣做是要完成的話。

因此,我決定重構我的應用程序,並將我希望修改的元素移到父活動中。片段現在只包含特定於一個片段的元素。無論如何,這可能是一個更清潔的設計。