首页 > 解决方案 > RecyclerView smothScrollToPosition 在 ViewPager 中不起作用

问题描述

我在 ViewPager 中使用 RecyclerView ,当我想滚动当前页面的第 30 个位置时,它适用于另一个页面。我在滑块适配器中定义了一个方法调用scrollTo在这个方法中我调用了 smoothScrollToPosition。方法scrollTo被调用时我点击一个按钮。我需要帮助。

主要活动

    val pager = findViewById<ViewPager>(R.id.view_pager)
    val adapter = SlideAdapter(this)

    pager.adapter = adapter

    findViewById<Button>(R.id.button).setOnClickListener {
        adapter.scrollTo(30)
    }

滑块适配器

lateinit var recyclerView: RecyclerView

fun scrollTo(position: Int) {
    recyclerView.smoothScrollToPosition(position)
}

override fun isViewFromObject(view: View, `object`: Any): Boolean = view == `object` as RelativeLayout

override fun getCount() = 5

override fun instantiateItem(container: ViewGroup, position: Int): Any {
    val view = LayoutInflater.from(context)
            .inflate(R.layout.slide, container, false) as RelativeLayout


    val list = mutableListOf<String>()

    for (i in 0..50)
        list.add("Element $i")

    val viewAdapter = Adapter(context, list)
    val viewManager = LinearLayoutManager(context)
    recyclerView = view.findViewById(R.id.recyclerView)

    recyclerView.apply {
        setHasFixedSize(true)
        layoutManager = viewManager
        adapter = viewAdapter
    }

    container.addView(view)

    return view
}

override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
    container.removeView(`object` as RelativeLayout)
}

标签: androidandroid-recyclerviewandroid-viewpagerscrollto

解决方案


您可以 linearLayoutManager.scrollToPositionWithOffset(30,0)在您的MainActivity. 使用linearLayoutManager您要设置的recylerview

编辑 它的发生是因为 viewpager 一次加载多个项目。您需要在 pageradadapter 中使用 setprimary 方法

override fun setPrimaryItem(container: ViewGroup, position: Int, object: Any) { super.setPrimaryItem(container, position, object) var mCurrentView = DataBindingUtil.getBinding<DcMediaPagerItemBinding>(object as View)}

并使用此 mCurrentView 来获取您当前的 recylerview 活动项目


推荐阅读