listview中的android layoutview项

时间:2013-12-27 14:58:42

标签: android listview events click touch

我在listview android中遇到过非常奇怪的行为。 我将几个ViewGroups(实际上是RelativeLayout)放入ListView中 它的项目。 ViewGroup具有TextViews和ImageViews。 我在ViewGroup中的ImageViews上注册了OnClickListener。 当我选中ImageViews时,OnClickListener会被延迟调用 (超过2秒钟。)有时,OnClickListener是 除非我在设备中标记了另一个视图,否则从未调用过。 在这种情况下,该方法称为乘法和突发。

我认为这似乎与焦点有关。但我找不到解决方案。 这种奇怪的行为只发生在Galaxy S3中。它在Galaxy S4中运行良好。

同时,即使在Galaxy S3中,OnTouchListener也能正常工作。 这意味着触摸事件到达ViewGroup中的View。我不能 理解为什么OnClickListener被调用延迟或失焦 即使它在OnTouchListeners中接收触摸事件。

12-27 23:31:51.203: I/debug(19534): myimageview touch event!!!
12-27 23:31:51.268: I/debug(19534): myimageview touch event!!!
12-27 23:31:51.278: I/debug(19534): myimageview touch event!!!
12-27 23:31:51.278: I/debug(19534): myimageview touch event!!!
12-27 23:31:53.333: D/AbsListView(19534): unregisterIRListener() is called 
12-27 23:31:53.433: D/AbsListView(19534): unregisterIRListener() is called 
12-27 23:31:53.518: I/debug(19534): dofollow clicked!!!222222222222

在上面的日志中,您可以看到4次触摸事件。但OnClickListener是 从最后一次触摸事件开始2秒后拨打电话。

更新: 我通过tabed reset按钮重置了我的设备(GalaxyS3) 我按下设备的电源按钮。我再次测试了它。但, 结果相同。 然而,今天,我通过分离电池关闭了我的设备。 打开电源。它没有任何源代码更改工作正常! 断电复位和软件复位有什么区别吗? 无论如何,这一次好话。如果是,我会再次报告 行为下次再次出现。

更新: 我发现这个问题发生在所有Android设备上。我猜 它与绘制ListView的缓存有关。我猜那个ListView 有时为其子视图制作绘图缓存。我检查了一下 通过启用在android系统设置中显示所有视图的边界。 启用显示边界后,我在ListView中导航几个项目。 然后,我看到一些ListView的孩子的视图没有它的孩子 布局边界。这意味着它只是图像而不是视图。 在那段时间,所有控件(包括ImageView)都不起作用。 只需很少滚动ListView,排队的点击事件就是 那个时候冲到了儿童控制室。这意味着滚动ListView 触发使用真实视图更改缓存图像。 我无法在ListView中找到关闭此绘图缓存的方法。

更新: 我解决了这个问题。我提供由我自己而不是静态创建的视图 在getView方法中使用convertView。在这种情况下,出了点问题 发生在ListView内部。我改变它总是使用convertView。

0 个答案:

没有答案