android - 如何在将用户带到下一个选项卡之前处理 TabLayout 单击?
问题描述
我有四个ViewPager
附在OnTabSelected
. 其中一个选项卡包含表单字段,一旦用户进行任何更改,我不应该让用户移动到下一个选项卡,除非他保存更改。
(换句话说,应该alert
继续OnTabSelected
而不是将用户带到下一个选项卡)
但我无法控制TabLayout -> "addOnTabSelectedListener"
任何帮助都会很棒
binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
if (State.isClear()) {
showNextTab()
} else {
showSaveSelectionAlert()
}
}
override fun onTabUnselected(tab: TabLayout.Tab) {
}
override fun onTabReselected(tab: TabLayout.Tab) {
}
})
解决方案
参考这个答案。除非您通过设置为 true 来特别允许它,否则显示的CustomViewPager
内容不允许任何滚动。setPagingEnabled
我的想法是setPagingEnabled
在用户填写所有字段之前必须为假。如果是这种情况,分页将再次启用,因此用户可以滑动到下一个选项卡。否则会出现错误信息。
我们可以进一步扩展它并使其也适用于TabLayout
。此答案向您展示了如何禁用单击选项卡。不过,onTouch
必须以不同的方式覆盖。如果满足所有条件,则应返回 false - 表示用户可以切换选项卡。否则显示错误消息。
简而言之:借助我为您提供的链接,禁用 ViewPager 的分页和 TabLayout 的选项卡切换。满足您的条件后启用它,否则显示错误。
推荐阅读
- excel - Excel 在线自定义 URL 参数
- python - 如果我使用网格,如何从条目中获取和保存值?(tkinter)
- python - 获取 Pandas DataFrame 列中字符串列表中的所有行 - 此模式具有匹配组
- conda - Snakemake conda env 路径和 Homer annotatePeaks.pl
- excel - 如果左侧有值,则动态自动填充单元格 VBA
- reactjs - 在父组件和子组件上使用 Chakra-UI useDisclosure 钩子
- oracle-apex - Oracle APEX:仅显示页面项目上的会话状态保护冲突错误
- orm - ORM:EclipseLink AssociationOverride“无法解析持久类型的覆盖属性”
- python - 使用 seaborn 的水平箱线图
- unity3d - 带有 Unity 3D 的 Moodle 的 H5P 内容?