Представление Recycler не обновляется при использовании библиотеки менеджера carrousel - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь получить данные изображения в представлении Recycler (каждый вложенный элемент является элементом PagerSnapHelper), но столкнулся с проблемой ниже
1 - вид рециркулятора не получает обновления при первой загрузке, субэлементы, кажется, смещены.
2 - мне нужно сдвинуть или коснуться экрана, чтобы перезагрузить представление, тогда все элементы отображаются нормально.

неисправный, при первой загрузке Recycler view the faulty one, when the first time load Recycler view

правильный, после того, как я проведу взглядом the correct one, after i swipe the view

В действии

override fun onGetDataSuccess(obj: RESP_DetailDiscover.ObjectDetailDiscover) {
        if (obj.gallery_popup.isNullOrEmpty()) {
            adapterPopup.setListData(mutableListOf())
        } else {
            adapterPopup.setListData(obj.gallery_popup)
        }
}

adapterPopup = PopupAdapter(applicationContext)
        val layoutManager = ZoomCenterCardLayoutManager(this)
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL)
        val snapHelper = PagerSnapHelper()
        snapHelper.attachToRecyclerView(rcvPopup)

        rcvPopup.addOnScrollListener(CenterScrollListener())
        rcvPopup.getViewTreeObserver().addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                rcvPopup.getViewTreeObserver().removeOnGlobalLayoutListener(this)
                val range = this@DetailDiscoverActivity.getResources().getDimension(R.dimen.width_item_horizontal_popup).toInt()
                val margin = this@DetailDiscoverActivity.getResources().getDimension(R.dimen.margin_item_horizontal_popup).toInt()
                val extent = (rcvPopup.getWidth() - range) / 2 - margin
                rcvPopup.setPadding(extent, 0, extent, 0)
                rcvPopup.setClipToPadding(false)
            }
        })
        rcvPopup.layoutManager = layoutManager
        rcvPopup.adapter = adapterPopup
        layoutManager.smoothScrollToPosition(rcvPopup, null, 0)
        rcvPopup.addItemDecoration(LinePagerIndicatorDecoration())

1 Ответ

0 голосов
/ 25 апреля 2019

Всякий раз, когда вы устанавливаете список данных, вы должны notifyDataSetChange() на вашем адаптере. Таким образом, вы скажете своей программе, что: «Эй, я что-то обновил, покажи мне!»

fun setListData(list: ArrayList<GalleryPopupObjectOrSomethingLikeThat>) {
  yourAdapterList = list
  notifyDataSetChange()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...