Kotlin FragmentStatePageAdapter уничтожить представление при третьем пролистывании, если в нем более 2 элементов - PullRequest
1 голос
/ 23 июня 2019

Я настроил FragmentStatePageAdapter, чтобы пролистывать фрагменты одного макета и разные данные (профили пользователей). Когда я даю список из 2 пунктов, все работает хорошо. Если я даю ему 3 или более предметов, он создает представления для фрагментов, но при третьем содержимом свайпа становится пустым, независимо от того, в каком направлении я пролистываю (вперед, затем вперед, вперед, назад). Если я аккуратно перемещаюсь к третьему элементу, все еще удерживая экран, я вижу его действительное содержимое, но когда я заканчиваю слайд, отпуская экран, все исчезает.

Адаптер страницы установлен как показано ниже. (swipeList - список идентификаторов пользователей, swipeEntityType == 0, каждое пользовательское содержимое загружается с помощью "uid", передаваемого через пакет)

class SwipePagerFragment : Fragment() {

    private lateinit var parent: MainActivity
    private lateinit var state: State
    private lateinit var ctx: Context
    private lateinit var swipeList: MutableList<Int>
    private lateinit var pager: ViewPager

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        val view = inflater.inflate(R.layout.fragment_swipe_pager, container, false)

        parent = activity as MainActivity
        state = parent.state
        ctx = state.ctx
        swipeList = state.swipeList

        pager = view.findViewById(R.id.fragmentSwipePager_pager)
        val pagerAdapter = ScreenSlidePagerAdapter(childFragmentManager)
        pager.adapter = pagerAdapter

        return view
    }

    private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
        override fun getCount(): Int = swipeList.size

        override fun getItem(position: Int): Fragment = when (state.swipeEntityType) {
            0 -> {
                makeUserFragment(swipeList[position])
            }
            else -> {
                makeEventFragment(swipeList[position])
            }
        }
    }

    private fun makeUserFragment(uid: Int): UserFragment {
        val bundle = Bundle()
        bundle.putInt("uid", uid)
        val frag = UserFragment()
        frag.arguments = bundle
        return frag
    }

    private fun makeEventFragment(eid: Int): EventFragment {
        val bundle = Bundle()
        bundle.putInt("eid", eid)
        val frag = EventFragment()
        frag.arguments = bundle
        return frag
    }

}

1 Ответ

0 голосов
/ 23 июня 2019

Настройка

pager.offscreenPageLimit = swipeList.size

решает мою проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...