在Kotlin中禁用Viewpager的View Pager滑动

Kri*_*iti 1 android android-viewpager kotlin

我是Kotlin的新手,片段中有View Pager,并且已在其中设置了pager适配器。一切工作正常,但是当我尝试停止在Kotlin中查看寻呼机的页面滑动并且在Kotlin中找不到任何方法时。我试图在堆栈上找到解决方案,但是没有运气。尽管Java中有很多,但Kotlin却没有。

我已经使用Java作为

viewPager.setPagingEnabled(false);
Run Code Online (Sandbox Code Playgroud)

但是每当我在Kotlin中尝试此操作时,我都会出错。任何帮助将不胜感激。

Mat*_*ith 11

我基于从Java转换此答案创建了Kotlin版本:https : //stackoverflow.com/a/13437997/8023278

没有内置的方法可以禁止在ViewPager的页面之间滑动,需要的是ViewPager的扩展,该扩展会覆盖onTouchEvent和onInterceptTouchEvent以防止滑动动作。为了使其更通用,我们可以添加一个setSwipePagingEnabled方法来启用/禁用页面之间的滑动。

class SwipeLockableViewPager(context: Context, attrs: AttributeSet): ViewPager(context, attrs) {
    private var swipeEnabled = false

    override fun onTouchEvent(event: MotionEvent): Boolean {
        return when (swipeEnabled) {
            true -> super.onTouchEvent(event)
            false -> false
        }
    }

    override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
        return when (swipeEnabled) {
            true -> super.onInterceptTouchEvent(event)
            false -> false
        }
    }

    fun setSwipePagingEnabled(swipeEnabled: Boolean) {
        this.swipeEnabled = swipeEnabled
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在布局xml中,使用新的SwipeLockableViewPager而不是标准ViewPager

<mypackage.SwipeLockableViewPager 
        android:id="@+id/myViewPager" 
        android:layout_height="match_parent" 
        android:layout_width="match_parent" />
Run Code Online (Sandbox Code Playgroud)

现在我们可以在活动/片段中进行呼叫,myViewPager.setSwipePagingEnabled(false)并且用户将无法在页面之间滑动