【问题标题】:How to validate input data in a Tab on Tab Change?如何在选项卡更改上验证选项卡中的输入数据?
【发布时间】:2013-01-11 08:13:02
【问题描述】:


我有一个这样的应用程序结构:

背景:
父活动 #1 只是持有标签主机、标签小部件和还在设置 3 个选项卡以将其内容设置为 3 个选项卡 activities(tab1、tab2、tab3 活动)。

更新: 我尝试在里面调用我的验证方法 父活动 #1 中的 onTabChangedListener 但我有一个空指针 例外。无法真正追踪到任何地方。我做了 评论/删除冲突代码,但我仍然没有得到 瓶颈。StackTrace(PasteBin 链接)。 Parent Activity #1,Tab#1 Activity的代码



问题:
我想验证用户在各个选项卡活动 onTabChanged 事件的表单字段中输入的数据但是 我无法设置多个setOnTabChangedListener
我在这里遗漏了什么吗?
侦听器在oncreate 方法下的自己的 tab# 活动中设置。

除了尝试上述技术之外,我还尝试设置onResume() 中的侦听器在主要父活动 #1 下。但是从未调用过on Resume() 方法。我也遇到了空指针异常。

验证背后的想法是: 我希望在用户更改选项卡时,应先验证数据,然后才能跳过选项卡。因此,如果选择了 tab#2/tab#3,我将要求 tab#1 在类似于 onTabChanged 的事件中验证数据。
此外,如果选择了当前 tab#2 并且用户选择了选项卡,这将适用#1/标签#3

任何建议将不胜感激..
感谢阅读..

【问题讨论】:

  • @Ajit 感谢您的回复。我面临的问题实际上并不是只为单个选项卡实现 onTabChanged 侦听器。当我在多个选项卡上实现侦听器时,它会突然出现。就像我上面的问题一样^ :(只有second监听器被调用,而不是tab#1 activity中的那个。
  • 我不确定我是否理解您要执行的操作,但我想您可以在每个选项卡活动中进行验证(当用户在字段上操作时)并基于此,不断更新活动中的静态布尔标志(意味着字段的状态处于真/假状态)。然后,您可以检查父 OnTabChangedListener 中这些布尔字段的状态并做任何您想做的事情。或者看看这个stackoverflow.com/questions/5399324/…
  • @Luksprog 感谢您的回复。但首先:告诉我OnTabChangedListener 应该在父活动下还是在维护标签内容的3个活动下?哪种方法最适用?其次:我尝试将我的 OnTabChangedListener 放在父活动的 onResume 方法中,但这不起作用,而是出现空指针异常。
  • 在父 Activity 中制作选项卡时(onCreate?)。

标签: java android tabs listener android-tabhost


【解决方案1】:

我想验证用户在表单字段中输入的数据 个别选项卡活动 onTabChanged 事件,但我无法设置 不止一个 setOnTabChangedListener。

不需要第二个OnTabChangeListener,即使您可以设置它也无济于事。在构建代码时,您需要访问子活动。您可以使用this question 中的答案之一来做到这一点。问题是,除了接受的答案之外,这些答案都使用了已弃用的方法。

我在 cmets 中提出的方法是在每个用作选项卡的子活动中都有一个静态布尔字段,并让您的所有活动在这些视图的状态发生变化时更新该布尔标志活动(如果您检查CheckBox,请在EditText 等中输入一些内容)。然后您可以简单地在OnTabChangeListener 中检查所需子活动的标志。我的方法应该可以,但是你的代码有点乱,所以你必须修改它。

我曾尝试在主目录下的 onResume() 中设置监听器 家长活动#1。但是从未调用过 on Resume() 方法。一世 也有空指针异常。

您在代码中收到NullPointerException 是正常的,因为我没有看到您在哪里初始化对您在OnTabChangeListener 中使用的子活动的引用。

还有:

不要使用TabActivity。它已被弃用,取而代之的是更灵活的Fragments 框架。这些片段可以帮助你,因为,我认为如果当前页面的验证失败并且OnTabChangeListener 可能来晚了一点(但我可能弄错了你想要的东西),你想停止更改标签。

附带说明,在您的代码中使用equals 来测试String 是否相等,而不是==

【讨论】:

  • +1 感谢您总结:) 但我也尝试将onTabChangedListener 设置在Parent Activity #1onCreate() 内(如我在上面发布的评论^)和它确实被调用了:) 每当我从 tab#1 更改为 tab#2 时,问题就出现了,我得到一个空指针异常。 :( 哦..我确实尝试过this 来自您给定链接的答案。
  • @quantumstates 问题不在于将被调用的OnTabchangedListener,您的代码的问题在于您的代码中有对选项卡活动的引用(q2cAccessq2c2Access)在您的代码中未在 anywhere 初始化,并且此引用抛出 NullPointerException。该答案没有意义,异常,活动仍然为空等?你在里面放了日志吗?
  • +1 是的,经过仔细分析后,我发现了瓶颈。非常感谢您在这里提出它:)
  • 我对代码进行了重大重组(删除了绝对方法,现在将代码隔离为精心设计的方法;尽管我仍然必须删除大量注释块 :D)并清理它。完全按照应有的方式工作! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多