Метод ViewPager2 setCurrentItem выдает ошибку - PullRequest
0 голосов
/ 14 июня 2019

Я использую ViewPager2, и у меня есть кнопка, которая изменяет текущую страницу на вторую, например:

button_next.setOnClickListener {
            setup_view_pager.currentItem = 1
}

Работает до тех пор, пока страница не будет проведена вручнуюи после этого он выдает эту ошибку:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: rs.ac.bg.matf.risk.matfasistent, PID: 32028
    java.lang.IllegalStateException: Expected position values between -1 and 1.
        at androidx.core.util.Preconditions.checkState(Preconditions.java:96)
        at androidx.viewpager2.widget.MarginPageTransformer.transformPage(MarginPageTransformer.java:56)
        at androidx.viewpager2.widget.PageTransformerAdapter.onPageScrolled(PageTransformerAdapter.java:72)
        at androidx.viewpager2.widget.CompositeOnPageChangeCallback.onPageScrolled(CompositeOnPageChangeCallback.java:59)
        at androidx.viewpager2.widget.ScrollEventAdapter.dispatchScrolled(ScrollEventAdapter.java:407)
        at androidx.viewpager2.widget.ScrollEventAdapter.onScrolled(ScrollEventAdapter.java:188)
        at androidx.recyclerview.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:5100)
        at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5265)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1012)
        at android.view.Choreographer.doCallbacks(Choreographer.java:824)
        at android.view.Choreographer.doFrame(Choreographer.java:756)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:998)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6745)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Это происходит только при этих щелчках, все отлично работает, когда фрагменты проведены вручную.Ни одно из мест трассировки ошибок не указывает на мой код: (

Это мой адаптер для ViewPager:

class SetupAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle)
    : FragmentStateAdapter(fragmentManager, lifecycle) {

    override fun getItemCount() = 3

    override fun createFragment(position: Int): Fragment {
        return when (position) {
            0, 1, 2 -> StudentSelectionFragment()
            else -> throw IllegalStateException()
        }
    }
}

И это весь соответствующий код Activity:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val adapter = SetupAdapter(supportFragmentManager, lifecycle)

        setup_view_pager.orientation = ViewPager2.ORIENTATION_HORIZONTAL
        setup_view_pager.adapter = adapter
        setup_view_pager.setPageTransformer(MarginPageTransformer(1500))

        button_next.setOnClickListener {
            setup_view_pager.setCurrentItem(1, true)
        }
    }

1 Ответ

0 голосов
/ 14 июня 2019

Проблема была в этой строке:

setup_view_pager.setPageTransformer(MarginPageTransformer(1500))

Я не был уверен, что он делает, и я все еще нет, но я скопировал из примера реализации.Удаление это решило проблему.

...