2015-07-09 3 views
2

У меня есть fragment A, в нем у меня есть вид пейджер с двумя fragment 1.1 и fragment 1.2 этих фрагментов являются детьми фрагментами fragment A.Как очистить вид фрагментов пейджера

Теперь, когда пользователь получает Фрагмент B, а затем обратно в AI нужно обновить ребенка фрагментов 1.1 и 1.2 опциями внутри фрагмента B. Проблема в том, я не могу обновить фрагменты, как они уже внутри childfragment manager, также когда я возвращаюсь к фрагменту A getItem(int position) пейджера представления, который не вызывается. Мне удалось удалить все дочерние фрагменты, прежде чем я установил адаптер пейджера, но я не уверен, что это правильный способ выполнить эту функцию.

У меня 1.1 и 1.2 ссылки внутри фрагмента A

спасибо.

ответ

3

Простой способ (не самый лучший способ), чтобы сделать это, чтобы переопределить getItemPosition() в вашем PagerAdapter:

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

Когда notifyDataSetChanged() метод адаптера, называется, то ViewPager будем называть getItemPosition() по взглядам он уже знает около. Вернувшись POSITION_NONE, вы сообщаете ViewPager, чтобы удалить представление. Как только ViewPager удалит представление, он вызовет getItem(), чтобы получить обновленный вид.

Таким образом, когда пользователь возвращается к фрагментировать вы могли бы назвать:

viewPager.getAdapter().notifyDataSetChanged(); 

Это запустит процесс обновления всех ваших взглядов.

+0

Привет, Крис, спасибо за ответ, но когда я вернулся из фрагмента B в A, я снова создаю адаптер. –

+0

Я создал функцию public void setData (Список data) \t { \t \t _fragData = data; \t \t notifyDataSetChanged(); \t} Я назвал его после того, как я установил адаптер в viewpager, но все равно никакого эффекта –

+0

Это лучший способ сделать это. Обратите внимание, что вызов 'notifyDataSetChanged()' для 'PagerAdapter' означает, что страницы изменили места; он отличается от адаптера AdapterVIew, поскольку он не обрабатывает изменения самого элемента. В вашем 'setData()' вы можете попытаться вызвать 'getView(). Invalidate()' на фрагменте, чтобы обновить представление своими данными. Обязательно проверьте, что 'getView()' не является нулевым, потому что это произойдет, когда фрагмент не будет отображаться. –

3

Была такая же проблема. Для меня это работало, чтобы переопределить FragmentStatePagerAdapter

@Override 
public Parcelable saveState() { 
    return null; 
} 

@Override 
public void restoreState(Parcelable state, ClassLoader loader) { 

} 

Эта работа для меня.

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