2016-03-07 4 views
0

Я внедрил swipe-представления в своем приложении. Адаптер - это 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

[This] (http://stackoverflow.com/questions/26359308/refresh-fragment-in-viewpager-using- fragmentstatepageradapter) может помочь вам – Sevle

ответ

0

У меня создается впечатление, что я просто не должен пытаться обновить кешированный фрагмент. Я думаю, что было бы легче, если бы это было сделано.

Поэтому я решил реорганизовать свое приложение и переместил элементы, которые я хочу изменить, в родительскую активность. Теперь фрагменты содержат только элементы, относящиеся к одному фрагменту. В любом случае, это более чистый дизайн.

Смежные вопросы