FragmentStateAdapter не воссоздает currentFragment после notifyDataSetChanged - PullRequest
0 голосов
/ 31 марта 2020

У меня есть FragmentStateAdapter в качестве адаптера ViewPager2.

class DefaultFragmentStateAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {

    var items = listOf<Fragment>()
       set(value) {
           field = value
           notifyDateSetChanged()
       }

    override fun getItemCount(): Int = items.size

    override fun createFragment(position: Int): Fragment = items[position]
}

Элемент адаптеров может меняться в зависимости от даты, выбранной пользователем, поэтому он должен быть динамичным. Происходит следующее: после того, как я вызываю adapter.items = {new_fragments}, текущий фрагмент не перезагружается, только после того, как я go переместился на одну из последних страниц ViewPager и вернулся на первую страницу, я смогу увидеть обновленный фрагмент. Текущий фрагмент не обновляется при вызове notifyDataSetChanged.

Как мне обновить текущий отображаемый фрагмент?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Мне пришлось переопределить:

override fun getItemId(position: Int): Long {
        return items[position].id
    }

override fun containsItem(itemId: Long): Boolean = items.any { it.id == itemId 

, чтобы все заработало!

0 голосов
/ 01 апреля 2020

Лучший способ, который я нашел, был setUserVisibleHint

добавить это к вашему фрагменту

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // load data here
    }else{
       // fragment is no longer visible
    }
}
...