对于我来说,在ListView
中为每行注册一个独特的OnClickListener
会更方便,但我想确保这是一种可接受的做法。我的current design是一个相当复杂的方式,将OnClickListener
与各行类型的问题区分开来。为每个ListView行实现onClickListener而不是onItemClickListener是否有缺点?
原因是我在ListView
中有多行的行。每个班级都有完全不同的责任和行为。例如,考虑可包含子类别和书名的ListView
。如果点击了书名,应该开始一个显示封面图片的新活动。如果点击了子类别,则会显示新的书籍和类别列表。
我希望行本身能够保持有关其自身身份和责任的知识,而不必泄露关于由onItemClickListener
的实施者维护的每行的知识。
我也想知道这样做的性能影响与实现我自己的逻辑来找出如何处理点击。
对于每个ListView
ArrayAdapter
行而不是onItemClickListener
实施onClickListener
是否存在缺陷?我在寻找具体数据和特定缺点而不是含糊不清的建议。
我应该期待内存使用,初始化时间,或稳态速度(如滚动列表)将显著影响?
@glenviewjeff - 我更新了我的答案回复。 – 2012-03-14 22:05:49
+1,非常感谢Ted的详细回复。你有没有可能在Android API中有任何数据或建议,证明你的建议是针对每行一个听众的,或者你是基于更多的预感? – 2012-03-15 13:19:39
使用基于标签的解决方案需要注意的一件事是确保您在每个'getView()'''bindView()'调用上更新标签。传统的“视图持有者”模式仅在行被充值时设置标签,但这是因为“持有者”仅包含与UI相关联的东西(例如,行中的小部件)。在这里描述的模式中,标签需要保存与模型数据相关的东西,因此会随着每个位置而改变。尽管如此,我仍然会推荐每行使用单独的点击监听器。 – CommonsWare 2012-03-15 13:40:04