Раздутый макет внутри Binder RecyclerView не возвращает никакого содержимого - PullRequest
0 голосов
/ 25 мая 2020

У меня есть предметы RecyclerView и ViewHolder. У каждого элемента есть список других элементов. Они просто надуты на l oop в контейнер в RecyclerView элементах.

Это надутый View - ViewPager с индивидуальным адаптером. Я хочу добиться эффекта прокрутки внутри дочерних элементов Recyclerview.

Но содержимое не видно.

Можно ли это сделать внутри RecyclerView?

Так что в целом RecyclerView элемент имеет своих дочерних элементов, и каждый дочерний элемент будет загружать своих дочерних элементов из вызова API при смахивании.

Обновление № 2: ViewPager работает должным образом, если я добавляю страницы в список перед инициализацией адаптера, но если я переписываю страницы из вызова API, он добавит их, но swipePager.adapter?.notifyDataSetChanged() не обновит список sh pages. Список имеет более одного дочернего элемента, но я не могу пролистать, потому что ViewPagerAdapter по-прежнему считает, что у него только 1 страница.

Это последнее, что мне нужно исправить. Я читал, что notifyDataSetChanged() ошибается в ViewPager и ведет себя иначе, чем RecyclerViewAdapter. У кого-нибудь есть решение, как обновить sh адаптер?

Пользовательский ViewPager:

<?xml version="1.0" encoding="utf-8"?>
    <com.my.project.SwipeViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="110dp"
        android:overScrollMode="never"
        xmlns:android="http://schemas.android.com/apk/res/android" />

Код внутри onBind для одного RecyclerView элемента:

parts.removeAllViews()
val li = LayoutInflater.from(root.context)
j.parts.forEachIndexed { i, p ->
                val v = li.inflate(R.layout.pager_layout, parts, false).apply {
                        val swipePager = findViewById<SwipeViewPager>(R.id.pager)
                        var nextParts = emptyList<PageItem>()
                        val pages = mutableListOf<PageScreen>()
                        var alreadySwiped = false
                        val swipeListener = object : OnSwipeOutListener{
                            override fun onSwipeOutAtEnd(){
                                //call API on swipe
                                if (!alreadySwiped){
                                    getUpcomingData(p.itemId){ list->
                                        alreadySwiped = true
                                        nextParts = list
                                        pages.clear()
                                        nextParts.forEach { np->

                                            pages.add(
                                                    PageScreen(
                                                            a,
                                                            app,
                                                            map,
                                                            np,
                                                            onClick = {
                                                                onItemClicked(np.nextId)
                                                            }
                                                    )
                                            )
                                        }

                                        swipePager.adapter?.notifyDataSetChanged()
                                    }
                                }
                            }
                            override fun onSwipeOutAtStart(){

                            }
                        }

                        //add first item which is known
                        pages.add(PageScreen(
                                a,
                                app,
                                map,
                                p,
                                onClick = {
                                    onItemClicked(p.nextId)
                                }
                        ))

                        swipePager.apply {
                            setOnSwipeOutListener(swipeListener)
                            adapter = SwipePagerAdapter(pages.toList()).also { it.notifyDataSetChanged() }
                        }

                    }


                parts += v
            }
...