У меня есть предметы 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
}