Я реализовал пользовательское представление календаря на холсте и хочу добавить его в ViewPager2
.
У меня есть адаптер для проверки поведения прокрутки:
class ViewPagerAdapter(private val viewPagerView: ViewPager2) :
RecyclerView.Adapter<ViewPagerAdapter.ViewHolder>() {
private val colors = arrayListOf(
R.color.green,
R.color.indigo,
R.color.blueGray,
R.color.brown,
R.color.color_orange_300
)
fun scrolledLeft() {
//colors.removeAt(colors.size - 1)
colors.add(0, R.color.brown)
//notifyItemRemoved(colors.size - 1)
notifyItemInserted(0)
}
fun scrolledRight() {
//colors.removeAt(0)
colors.add(R.color.green)
//notifyItemRemoved(0)
notifyItemInserted(colors.size - 1)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.pager_item, parent, false)
)
override fun getItemCount(): Int = colors.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind("item $position", colors[position])
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val textView = itemView.findViewById<TextView>(R.id.text)
private val root = itemView.findViewById<View>(R.id.root)
fun bind(text: String, color: Int) {
textView.text = text
root.setBackgroundColor(ContextCompat.getColor(itemView.context, color))
}
}
}
Слушатель:
viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
Log.d("abcd", "count: ${viewPagerAdapter.itemCount}")
if (lastDirection == Direction.RIGHT) {
viewPagerAdapter.scrolledRight()
} else if (lastDirection == Direction.LEFT) {
viewPagerAdapter.scrolledLeft()
}
}
override fun onPageScrolled(position: Int, posOffset: Float, posOffsetPixels: Int) {
super.onPageScrolled(position, posOffset, posOffsetPixels)
if (lastViewPagerPosition > position) {
lastDirection = Direction.LEFT
} else if (lastViewPagerPosition < position) {
lastDirection = Direction.RIGHT
}
lastViewPagerPosition = position
}
})
Моя логика c была такой: у нас 5 страниц и мы начинаем с индекса 2. При прокрутке вправо удаляем страницу с индексом 0 и добавляем новую страницу в конец. При прокрутке влево, удалении последней страницы и добавлении новой страницы с индексом 0. Но если вы закомментируете строки, поведение будет некорректным.
Я не хочу использовать Int.MAX_VALUE
или фрагменты!