我在查看页面中使用回收器视图,当我想使用smothScrollToPosition滚动到某个位置时,我看不到当前页面中的任何变化,但是当我滑动时,我看到更改已应用于下一页或上一页。我在滑块适配器调用scrollTo中定义了一个函数,在此方法中,我调用smothScrollToPosition。方法scrollTo是在用户单击主活动中的按钮时调用
的主活动
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_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)
}
}
}滑动适配器
class SlideAdapter(val context: Context) : PagerAdapter() {
lateinit var recyclerView: RecyclerView
lateinit var viewManager : LinearLayoutManager
fun scrollTo(position: Int) {
viewManager.scrollToPositionWithOffset(position, 0)
}
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)
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)
}
}
图像页 1 我单击按钮,没有看到任何变化
图像第 2 页 我滑动并看到更改已应用于此页面。
我需要帮助,请^_^
来自 JavaDOC 的方法 scrollToPositionWithOffset:
请注意,滚动位置更改在下一次布局调用之前不会反映。
如果您只是想使位置可见,请使用 {@link #scrollToPosition(int(}。
可能这是问题所在?