【发布时间】:2012-02-02 13:04:53
【问题描述】:
我目前遇到了一个非常奇怪的错误。我有一个填充了一些自定义视图的网格视图。只要我不滚动,点击处理程序就可以正常工作。
但是当我向下滚动时,事件处理程序丢失并且不再反应。我已经尝试添加一个 onScrollEventHandler 但这似乎也丢失了。
代码很标准:
grdVwUser = (GridView)findViewById(R.id.grdVwUser);
grdVwUser.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
long arg3) {
Log.e(TAG, "GOT CLICKED");
final Intent intent = getMyIntent(); // intent for another activity
startActivity(intent);
}
});
知道那可能是什么吗?
另外:我在 logcat 中也收到了这个错误信息
02-02 14:02:23.636: W/KeyCharacterMap(13871): Bad keycharmap - filesize=32
02-02 14:02:23.636: W/KeyCharacterMap(13871): Error loading keycharmap file '/system/usr/keychars/bravo-keypad.kcm.bin'. hw.keyboards.0.devname='bravo-keypad'
02-02 14:02:23.636: W/KeyCharacterMap(13871): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
但更进一步,GC 似乎做了很多工作:
02-02 15:51:11.956: D/dalvikvm(16606): GC_EXTERNAL_ALLOC freed 11572 objects / 678832 bytes in 62ms
02-02 15:51:12.096: D/dalvikvm(16606): GC_EXTERNAL_ALLOC freed 1581 objects / 65072 bytes in 55ms
02-02 15:51:12.256: D/dalvikvm(16606): GC_EXTERNAL_ALLOC freed 301 objects / 23248 bytes in 55ms
02-02 15:51:12.406: D/dalvikvm(16606): GC_EXTERNAL_ALLOC freed 194 objects / 7816 bytes in 52ms
02-02 15:51:12.556: D/dalvikvm(16606): GC_EXTERNAL_ALLOC freed 104 objects / 3920 bytes in 52ms
02-02 15:51:12.686: D/dalvikvm(16606): GC_EXTERNAL_ALLOC freed 107 objects / 3968 bytes in 54ms
会不会是 GC 破坏了一个将处理程序链接到 gridview 的对象? (当我将 Activity 本身用作 OnItemClickhandler 时会产生相同的行为)
调试结果 1: 我也尝试过,但没有开始其他活动。我的网格单元格显示了一些从网络服务器延迟加载的图像。当我滚动它时,它丢失了事件处理程序,但是当 asynctask 设置了新图像时,我将其取回并能够再次单击。 但是滚动后我又丢了。
调试结果 2: 在玩了之后,我添加了一个 onscroll-handler,它将一个新的匿名类设置为事件处理程序,它调用活动的 onItemClicked 方法。只是看看这是否可行 - 它没有! 我还在匿名方法和 on scroll 中添加了一个日志输出。 on scroll 被调用,但 onItemClicked 事件处理程序没有。 这意味着什么?
调试结果 3: 即使 onItemClicked 没有触发 OnTouch。
【问题讨论】:
-
该错误似乎不相关。您可以发布部分代码吗?这会有所帮助。
-
如果您评论对 getMyIntent() 的调用,是否也会发生这种情况? (当然还有 startActivity)
-
@Luis Ollero - 是的,检查我刚刚写的更新。
-
GC 不应该删除当前正在使用的对象。我承认我有点迷路了。你是不是在 Adapter 的 getView() 中延迟加载?
-
您的代码看起来不错。想不出这里有什么问题。您可以发布其余的活动代码吗?还有xml。
标签: android gridview event-handling