Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView smothScrollToPosition在ViewPager中不起作用_Android_Android Recyclerview_Android Viewpager_Scrollto - Fatal编程技术网

Android RecyclerView smothScrollToPosition在ViewPager中不起作用

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)

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

main活动

    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项