RecyclerView smothScrollToPosition не работает в ViewPager - PullRequest
0 голосов
/ 13 октября 2019

Я использую RecyclerView в ViewPager, и когда я хочу прокрутить 30-ю позицию текущей страницы, он применяется скорее на другой странице. У меня есть другой метод в вызове адаптера ползунка scrollTo в этом методе Icall smoothScrollToPosition . Метод scrollTo - это вызов, когда я нажимаю на кнопку. Мне нужна помощь, пожалуйста.

MainActivity

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

    pager.adapter = adapter

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

SliderAdapter

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

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете попробовать этот метод - linearLayoutManager.scrollToPositionWithOffset(30,0) на вашем MainActivity. Используйте linearLayoutManager, для которого вы устанавливаете recylerview.

РЕДАКТИРОВАТЬ Это происходит из-за загрузки в пейджер нескольких элементов одновременно. вам нужно использовать метод setprimary в pageradadapter

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

и использовать этот mCurrentView для получения вашего текущего элемента recylerview в действии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...