Android - gridView onItemClick

时间:2017-02-22 17:38:46

标签: android gridview

我的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中搜索但我无法成功。请帮忙

3 个答案:

答案 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