ViewPager PageAdapter не обновляет представление

1

Хорошо, проблема почти такая же, как и в этом посте, но решение там не решило мою проблему.

Я использую FragmentPagerAdapter со List содержащим Fragment как показано ниже.

public class ViewPageAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    ...
}

И мой Fragment переопределяет метод onCreateView, подобный этому.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
    return inflater.inflate(theLayoutResourceId, container, false);
}

Если вы используете метод в этом сообщении (переопределите int getItemPosition(Object object) чтобы вернуть POSITION_NONE), я получу java.util.ConcurrentModificationException после вызова notifyDataSetChanged().

Поток вызова метода подобен этому.

  1. на странице 1 страницы ViewPager откройте Dialog ViewPager, нажав Button (точно так же, как LoginButton в Android-приложении Facebook)
  2. после закрытия диалогового окна (onAuthSucceed), удалите страницу 1 страницы ViewPager и добавьте другую страницу для индекса страницы 1
  3. принудительное обновление с помощью notifyDataSetChanged

Я попробовал много других способов удалить Fragment перед добавлением Fragment в адаптер, но страница не будет обновляться до нового содержимого.

Я просто нашел один способ сделать страницу пустой...

viewpager.removeViewAt(1);
viewpagerAdapter.removeItem(1);
viewpagerAdapter.addItem(1, new Fragment(...));

Либо решение проблемы обновления, либо java.util.ConcurrentModificationException было бы здорово. Спасибо за вашу помощь :)

  • 1
    Привет. Не могли бы вы найти решение этой проблемы? У меня точно такая же проблема, но я не могу найти никакого рабочего решения для меня :( Пожалуйста, помогите, если у вас есть что-то, что работает! Спасибо :)
  • 0
    Нет, я тоже не решил проблему.
Теги:
android-fragments
android-viewpager
facebook

1 ответ

2
Лучший ответ

Этот пост старый, но на случай, если кто-нибудь столкнется с этим. Я нашел ответ в подобном сообщении здесь. Похоже, что вы на правильном пути, но вам нужно изменить свой FragmentPagerAdapter на FragmentStatePagerAdapter и переопределить getItemPosition (Object), как вы предложили в своем посте.

Удачи вам.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню