Я внедрил 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 не возвращает соответствующий фрагмент, но родительская активность.
Теперь, какой рекомендуемый подход для обновления кэшированного фрагмента?
ViewPager.setOffscreenPageLimit (0) не работает, поскольку минимальный размер экранных страниц равен 1. – Sevle
[This] (http://stackoverflow.com/questions/26359308/refresh-fragment-in-viewpager-using- fragmentstatepageradapter) может помочь вам – Sevle