gpt4 book ai didi

android - OnClickListeners 不一致触发

转载 作者:搜寻专家 更新时间:2023-11-01 09:11:32 24 4
gpt4 key购买 nike

我有一个 ListView ,其中每个列表项都可以包含 1 个或多个可点击的图像。单击它们会启动一个显示图像全屏版本的 Activity 。

以下代码(稍微简化)在我的 GetView() 实现中为每个 ListItem 中的每个图像设置了 OnClickListeners。这非常有效。

ImageView imageView = (ImageView)convertView.findViewById(R.id.image_res);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ActivityLauncher.startPhotoViewerActivity(mContext, item);
}
});

但是,为了提高性能,我决定在第一次构造 View 后将其存储在内存中。我这样做而不是使用 convertView,因为有 4-5 种不同类型的 View ,它们有时是在代码中动态构建的,因此难以重用。

一旦我开始将 View 存储在内存中,然后在随后根据位置调用 getView() 期间返回已经构建的 View ,性能就会显着提高,但是 OnClickListeners 开始表现得很时髦。

具体来说,现在当点击给定图像时,它的 OnClickListener 可能立即触发或根本不触发。在它没有立即触发的情况下,它可能会在开始滚动时立即触发。如果这没有触发 OnClickListener 运行,单击返回(退出 Activity )可能会触发它。如果这没有触发它,则通过按 BACK 关闭所有 Activity )然后重新进入应用程序将触发所有排队的 OnClickListeners。在一个案例中,我在各种图像上点击了 25 次,但没有任何结果。然后我关闭所有 Activity ,然后再次单击应用程序图标,打开所有 25 个图像预览。

知道是什么原因造成的吗?对我来说有趣的是,OnClickListeners 显然设置正确,因为它们确实会在某个时间点打开照片查看器 Activity 。永远不会打开错误的图像,也永远不会出现它们永远不会开火的情况。问题是它们可能会立即或更晚开火。

是否不建议像我一样为每个列表项保存 View 并根据 getView() 中的位置返回它们?非常感谢任何帮助。

最佳答案

观看在 Google I/O 上关于 ListViews 的演讲。在 13:45,他们特别警告不要缓存 View 并返回它们。如果这样做,可能会导致奇怪的行为,这正是我正在经历的。鉴于此,这个问题没有实际意义。

http://www.youtube.com/watch?v=wDBM6wVEO70

希望这可以帮助将来的人避免同样的陷阱。不推荐缓存 View !!!

关于android - OnClickListeners 不一致触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7944582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com