【问题标题】:How to use recyclerview smothScrollToPosition in a viewpager如何在 viewpager 中使用 recyclerview smothScrollToPosition
【发布时间】:2019-10-21 12:50:18
【问题描述】:

我在 viewpager 中使用 recyclerview,当我想使用 smothScrollToPosition 滚动到某个位置时,我发现当前页面没有任何变化但是当我滑动时,我看到更改已应用于下一页或上一页。我在 sliderAdapter 调用 scrollTo 中定义了一个函数,在这个方法中我调用 smothScrollToPosition。方法 scrollTo 是调用当用户点击 MainActivity

中的按钮时

MainActivity

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)
}

}

IMAGE PAGE 1我点击按钮,我没有看到任何变化

IMAGE PAGE 2我滑动并看到更改已应用于此页面。

我需要帮助^_^

【问题讨论】:

    标签: android android-recyclerview android-viewpager scrolltop


    【解决方案1】:

    来自方法scrollToPositionWithOffset的JavaDOC:

    请注意,滚动位置更改将在下一次布局调用之前反映。

    如果您只是想让位置可见,请使用 {@link #scrollToPosition(int)}。

    可能是这里有问题?

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      相关资源
      最近更新 更多