Android RecyclerView smothScrollToPosition在ViewPager中不起作用
我在ViewPager中使用RecyclerView,当我想滚动当前页面的第30个位置时,它会应用到另一个页面上。我在滑块适配器调用中定义了一个方法scrollTo,在这个方法中,我调用smoothScrollToPosition。单击按钮时调用该方法scrollTo。 我需要帮助 main活动Android RecyclerView smothScrollToPosition在ViewPager中不起作用,android,android-recyclerview,android-viewpager,scrollto,Android,Android Recyclerview,Android Viewpager,Scrollto,我在ViewPager中使用RecyclerView,当我想滚动当前页面的第30个位置时,它会应用到另一个页面上。我在滑块适配器调用中定义了一个方法scrollTo,在这个方法中,我调用smoothScrollToPosition。单击按钮时调用该方法scrollTo。 我需要帮助 main活动 val pager = findViewById<ViewPager>(R.id.view_pager) val adapter = SlideAdapter(this)
val pager = findViewById<ViewPager>(R.id.view_pager)
val adapter = SlideAdapter(this)
pager.adapter = adapter
findViewById<Button>(R.id.button).setOnClickListener {
adapter.scrollTo(30)
}
val pager=findviewbyd(R.id.view\u pager)
val适配器=滑块适配器(此)
pager.adapter=适配器
findViewById(R.id.button).setOnClickListener{
适配器。滚动至(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)
}
lateinit var recyclerView:recyclerView
有趣的滚动到(位置:Int){
recyclerView.smoothScrollToPosition(位置)
}
覆盖乐趣isViewFromObject(视图:视图,`object`:Any):布尔=视图==`object`作为相对对象
重写fun getCount()=5
覆盖元素(容器:视图组,位置:Int):任意{
val view=LayoutInflater.from(上下文)
.如图所示充气(右布局滑轨、容器、假)
val list=mutableListOf()
对于(0..50中的i)
列表。添加(“元素$i”)
val viewAdapter=适配器(上下文,列表)
val viewManager=LinearLayoutManager(上下文)
recyclerView=view.findViewById(R.id.recyclerView)
回收视图{
setHasFixedSize(真)
layoutManager=viewManager
适配器=视图适配器
}
container.addView(视图)
返回视图
}
覆盖项(容器:视图组,位置:Int,`object`:Any){
container.removeView(`object`作为RelativeLayout)
}
您可以尝试这种方法-
linearLayoutManager.在main活动上滚动带偏移量(30,0)的拓扑位置
。使用linearLayoutManager
,将其设置为recylerview
编辑
这是因为viewpager一次加载多个项目。您需要在pageradadapter中使用setprimary方法
override fun setPrimaryItem(容器:ViewGroup,位置:Int,对象:Any){
super.setPrimaryItem(容器、位置、对象)
var mCurrentView=DataBindingUtil.getBinding(对象作为视图)}
并使用此mCurrentView获取活动中当前的recylerview项目您好!我试过了,结果是一样的。问题是,当我调用滚动功能时,我看不到当前页面有任何变化。更改应用于下一张幻灯片或上一张幻灯片,我在更改页面时看到它。这是因为viewpager一次加载多个项目。您需要在pageradadapter override fun setPrimaryItem(容器:ViewGroup,position:Int,对象
:Any){super.setPrimaryItem(容器,position,对象
)中使用setprimary方法mCurrentView=DataBindingUtil.getBinding(对象
作为视图)}并使用此mCurrentView获取活动中的当前recylerview项