自定义控件如何响应外部事件?

前朝遗民 2020-09-07 10:03:21
做了个时间输入的自定义控件:



点击控件右边的按钮,会弹出选择器供用户选择而得到分秒时间:




然后用在我的UI上:




现在的问题是: 当用户每次选择时间后,我需要把短跑和长跑时间求和,如果超过5分钟,就显示不合格,否则就显示合格。

设想思路: 如果在界面上加上一个按钮,通过点击事件来判断,肯定是没问题的。但这样做,显然是很笨的。
看得出来,这个逻辑是没有办法做在自定义控件里的,那么我怎样才能做到在用户选择了时间之后就能实现这个逻辑呢?



...全文
7673 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
云农民工 2020-09-09
  • 打赏
  • 举报
回复
引用 9 楼 前朝遗民 的回复:
[quote=引用 5 楼 安卓小猿 的回复:]时间选择器的ok键的点击事件调用时间计算方法,每次选择完时间后都计算一次,然后setText到文本框
自定义控件怎么知道外面的逻辑呢,没办法知道的![/quote]暴露自定义控件的接口,在外部实现这个接口,每次点击自定义控件的按钮,就调用外部的方法
前朝遗民 2020-09-09
  • 打赏
  • 举报
回复
引用 5 楼 安卓小猿 的回复:
时间选择器的ok键的点击事件调用时间计算方法,每次选择完时间后都计算一次,然后setText到文本框
自定义控件怎么知道外面的逻辑呢,没办法知道的!
前朝遗民 2020-09-09
  • 打赏
  • 举报
回复
引用 6 楼 惊喜不断 的回复:
大致看一下,应该是跨类调用, 一般都是用 委托处理 这种,不专业点还有 广播/eventbus ,方法很多。。 。
在C#中,我都是用委托完成这种功能的,觉得委托也很好用
前朝遗民 2020-09-09
  • 打赏
  • 举报
回复
引用 4 楼 夏成沙 的回复:
1. 假定你的控件为 TimeChoice 2. 设定你的控件内部 定义接口 OnTimeChoiceListener, 包含方法 onChoice(TimeChoice instance, String time) 3. 你的 外部 Fragment/Activity 实现 OnTimeChoiceListener 4. 你的 TimeChoice 控件内部 包含 OnTimeChoiceListener mListener; 5. 当你的 TimeChoice 完成输入(这个你需要知道什么时候完成) 6. 内部方法调用 mListener.onChoice(this, "xxxxTimeContent"); 7, 外部Activity/Fragment 根据回调方法,并且通过 instance 参数,就可以知道是哪一个时间,然后处理你的业务逻辑 8. 完成,你太难了~,安卓程序员太难了~
最后采用的方法跟你的差不多,用接口的方式实现了,只是有个麻烦:只要在某个新的页面上放一个这样的控件,就必须实现接口的方法,不管这个方法里面有没有内容!
前朝遗民 2020-09-09
  • 打赏
  • 举报
回复
引用 11 楼 JMSissi 的回复:
为啥要自定义控件,几个输入框设定下inputType,然后加个按钮,不是会比这个更简单吗
用InputType固然是可以的,但是要对最大值最小值进行约束,做成自定义控件有几个好处:1,统一的界面,多处用到,放一个就是了; 2,用户能清楚地知道最大值和最小值的范围,不会发生盲目输入。 3, 时间单位是变化的,有时候是mm:ss 有时候是 hh:mm, 有时候是mm:10ms,做成了自定义控件,我能根据输入的类型值,直接显示和换算
忘不川 2020-09-09
  • 打赏
  • 举报
回复
可以在第二个时间选择 点击完成的时候 自动调用求时间和的方法啊~
JMSissi 2020-09-09
  • 打赏
  • 举报
回复
为啥要自定义控件,几个输入框设定下inputType,然后加个按钮,不是会比这个更简单吗
ink_s 2020-09-07
  • 打赏
  • 举报
回复
就像 TextView 有setText 方法,可以直接调用, 你这个自定义VIEW 添加个方法,调用就行了,不一定要接口
ink_s 2020-09-07
  • 打赏
  • 举报
回复
选择时间的回调,然后调用计算方法,把“界面上加上一个按钮,通过点击事件来判断”这个判断方法在点击选择时间后的确定按钮调用
前朝遗民 2020-09-07
  • 打赏
  • 举报
回复
我考虑过在自定义控件中增加一个接口,接口中增加一个抽象方法,让外部去实现。但我是新手,还没写过接口呢,不知道这样行不行?
惊喜不断 2020-09-07
  • 打赏
  • 举报
回复
大致看一下,应该是跨类调用, 一般都是用 委托处理 这种,不专业点还有 广播/eventbus ,方法很多。。 。
云农民工 2020-09-07
  • 打赏
  • 举报
回复
时间选择器的ok键的点击事件调用时间计算方法,每次选择完时间后都计算一次,然后setText到文本框
夏成沙 2020-09-07
  • 打赏
  • 举报
回复
1. 假定你的控件为 TimeChoice 2. 设定你的控件内部 定义接口 OnTimeChoiceListener, 包含方法 onChoice(TimeChoice instance, String time) 3. 你的 外部 Fragment/Activity 实现 OnTimeChoiceListener 4. 你的 TimeChoice 控件内部 包含 OnTimeChoiceListener mListener; 5. 当你的 TimeChoice 完成输入(这个你需要知道什么时候完成) 6. 内部方法调用 mListener.onChoice(this, "xxxxTimeContent"); 7, 外部Activity/Fragment 根据回调方法,并且通过 instance 参数,就可以知道是哪一个时间,然后处理你的业务逻辑 8. 完成,你太难了~,安卓程序员太难了~

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧