When I click the add button, the corresponding list data will be added by one and will be refreshed to the UI. The UI has indeed been refreshed, but after refreshing, viewpager2 will slide to the next page I wrote a simple Viewapger2 for testing, and the code is as follows,Who will tell me how to solve this problem, or has anyone encountered this problem?
MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var adapter: BannerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.lifecycleOwner = this
initBanner()
}
private fun initBanner() {
adapter = BannerAdapter(object : BannerAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
val list = adapter.currentList.toMutableList()
list.forEachIndexed { index, bannerData ->
if (index == position) {
val temp = bannerData.copy()
temp.count++
list[index] = temp
}
}
adapter.submitList(list)
}
})
binding.viewPager.adapter = adapter
val bannerDataList = mutableListOf<BannerData>()
for (i in 0..10) {
bannerDataList.add(BannerData("第${i}个", i))
}
adapter.submitList(bannerDataList)
}
}
BannerAdapter
class BannerAdapter(private val itemClickListener: OnItemClickListener) :
ListAdapter<BannerData, BannerAdapter.ViewHolder>(DiffCallback()) {
class ViewHolder(
private val binding: ItemBannerBinding,
private val itemClickListener: OnItemClickListener
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.add.setOnClickListener {
itemClickListener.onItemClick(adapterPosition)
}
}
fun bind(item: BannerData) {
binding.item = item
binding.executePendingBindings()
}
}
class DiffCallback : androidx.recyclerview.widget.DiffUtil.ItemCallback<BannerData>() {
override fun areItemsTheSame(oldItem: BannerData, newItem: BannerData): Boolean {
return oldItem === newItem
}
override fun areContentsTheSame(oldItem: BannerData, newItem: BannerData): Boolean {
return oldItem == newItem
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
ItemBannerBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
), itemClickListener
)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position))
}
interface OnItemClickListener {
fun onItemClick(position: Int)
}
}
I tried using binding.viewPage.currentItem = position to control its position, but it didn't work