我的gridView有奇怪的问题。我在这个itemClikListener上设置它并不起作用。
视图的结构是:GridView -> LinearView with ImageView
。
当我将itemClickListener设置为如下时,它不起作用:
GridView board;
board.setAdapter(boardAdapter);
board.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.d("CLICK", "onClick");
}
});
这不行,我的控制台很清楚。
当我在我的GridViewAdapter -> boardAdapter
中分别在每个imageView(在gridView的每个项目上)实现监听器时,一切正常。
Adapter getView()
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("CLICK", "onClick");
}
});
为什么我无法将侦听器应用于整个gridView及其项目?我需要在类中有这样的监听器,其中包含字段gridView和gridViewAdapter,而不是在gridViewAdapter中?
我在stackoverflow中搜索但我无法成功。请帮忙
答案 0 :(得分:1)
@Override
注释。匿名内部类也应该从AdapterView引用。请参阅下面的示例代码。
board.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.d("CLICK", "onClick");
}
});
答案 1 :(得分:1)
尝试将这些内容添加到 GridView
项目 layout.xml
android:focusable="false"
android:focusableInTouchMode="false"
还要确保适配器返回true
方法
isEnabled(int position)
答案 2 :(得分:1)
代码中的一个问题是缺少@Override注释。
board.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.d("CLICK", "onClick");
}
});
如果仍然不起作用。然后可能是你的任何Grid Item的子视图也在监听click事件。 如果您了解android Touch Framework的均匀处理程序,那么您可能理解我的观点。否则知道android Touch Framework的工作原理会非常好。 您可以了解here。