android - 不能只在一个方向上滑动 ViewPager2
问题描述
我尝试仅在一个方向(向右)启用 ViewPager2 中的滑动。我有 5 页。
我在我的活动中尝试这个:
viewPager2.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
if (currentPage == position) {
dataBinding.viewPager2.setUserInputEnabled(false)
}
if (currentPage < position) { // swipe left
dataBinding.viewPager2.setUserInputEnabled(true)
} else if (currentPage > position) { // swipe right
dataBinding.viewPager2.setUserInputEnabled(false)
}
currentPage = position;
}
})
但这无济于事。它禁用了两个方向。
解决方案
试试这个方法
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.viewpager2.widget.ViewPager2
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var previousPage: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewpager.adapter = MyAdapter(this)
viewpager.orientation = ViewPager2.ORIENTATION_HORIZONTAL
// try this to disable swiping in previous page
viewpager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
if (position < previousPage) {
viewpager.setCurrentItem(previousPage, true)
} else {
previousPage = position
}
}
})
}
}
推荐阅读
- php - 在嵌套多维数组中查找键值
- c# - 从其他 wpf 窗口数据网格填充 WPF 文本框
- c# - foreach 循环没有运行里面的代码
- javascript - 如何在 Angular 6 中将输入值传递给表单提交的函数?
- javascript - 获取 html,使用 jquery ajax 将一些内容附加到 body 标记
- php - 如何启用 Mod_Rewrite
- c# - 实体框架。用子实体保存大对象
- angular - 从 angular 5 更新到 angular 6 并且不能再构建 dist 文件夹
- testing - 在 Truffle 中测试智能合约需要:如果功能不无效,则交易恢复
- state - Flink:跨流状态访问吗?