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