java - 在特定视图上滑动时禁用 ViewPager 滑动
问题描述
我想保留我的滑动功能ViewPager
但是我想View
在我的布局文件中滑动某个特定时禁用它(Preference
我正在扩展的自定义):
活动.xml
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.viewpager.widget.ViewPager>
活动.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
viewpager.addOnPageChangeListener(this)
// Initialise FragmentAdapter
val fragmentAdapter = ScreenSlidePagerAdapter(supportFragmentManager)
viewpager.adapter = fragmentAdapter
viewpager.currentItem = 1
}
private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm){
override fun getItem(position: Int): Fragment {
return when(position){
0 -> {
SettingsFragment()
}
2 -> {
UserFragment()
}
else -> {
MainFragment()
}
}
}
// 3 Fragments
override fun getCount(): Int {
return 3
}
}
我怎样才能做到这一点?
解决方案
您可以使用此代码来实现您的目标。
class LockableViewPager : ViewPager {
private var swipeable: Boolean = false
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
this.swipeable = true
}
override fun onTouchEvent(event: MotionEvent): Boolean {
return if (this.swipeable) {
super.onTouchEvent(event)
} else false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return if (this.swipeable) {
super.onInterceptTouchEvent(event)
} else false
}
fun setSwipeable(swipeable: Boolean) {
this.swipeable = swipeable
}
}
然后你只需要打电话
setSwipeable(false)
希望这可以帮助。谢谢你