首页 > 解决方案 > 如何将 ItemTouchHelper.SimpleCallback 与 ViewPager2 一起使用?

问题描述

我已经使用创建了一个图像滑块ViewPager2,我需要一个功能,当我向上滑动图像时应该将其删除。我已经和RecyclerView. 所以我记得我可以使用ItemTouchHelper.SimpleCallback滑动来删除功能。但是attachToRecyclerView方法需要一个RecyclerView不是ViewPager2即使viewpager2使用 RecyclerView 适配器。

科特林:

ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP) {
    override fun onMove(
        recyclerView: RecyclerView,
        viewHolder: RecyclerView.ViewHolder,
        target: RecyclerView.ViewHolder
    ): Boolean {
        return false
    }

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {

    }
}).attachToRecyclerView(binding.viewPager)

viewpager2 滑块

标签: androidkotlinandroid-recyclerviewandroid-viewpager2itemtouchhelper

解决方案


这是从 ViewPager2 获取 RecyclerView 的另一种方法。我假设您有一个名为 PictureItemAdapter 的适配器:

class PictureItemAdapter(private val recyclerViewAttached: (RecyclerView) -> Unit) : RecyclerView.Adapter<PictureItemViewHolder>() {

    override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
        super.onAttachedToRecyclerView(recyclerView)
        recyclerViewAttached(recyclerView)
    }
    ...
}

您将从recyclerViewAttached关闭处收到 Recycler 视图

val pictureItemAdapter = PictureItemAdapter{ recyclerView ->
    ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP) {
        override fun onMove(
            recyclerView: RecyclerView,
            viewHolder: RecyclerView.ViewHolder,
            target: RecyclerView.ViewHolder
        ): Boolean {
            return false
        }

        override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {

        }
    }).attachToRecyclerView(recyclerView)
}
binding.viewPager.adapter = pictureItemAdapter

注意:RecyclerViewAdapterFragmentStateAdapter都有一个 onAttachedToRecyclerView 方法。


推荐阅读