Android:在linearlayout内的gridview的空白处检测点击事件

hqt*_*hqt 8 android

我有以下问题.我有一个GridView内部LinearLayout如下图所示.我想在用户点击GridView图像中的空白区域时检测点击事件,我想要的位置是红色区域,也是绿色区域内.

但我有以下问题.

  1. 如果我添加onClickListenerGridView:错误,因为适配器不能添加Click事件.
  2. 如果我添加onItemClickListenerGridView:我只是可以检测存在的项目(在图像中的白框)
  3. 如果我添加onClickListener,LinearLayout我只能检测绿色区域上的点击事件,而不是红色区域.

那么我该如何解决上述问题呢.

@Edit:我的布局看起来像:

<LinearLayout>
  <GridView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

在此输入图像描述

Mik*_* M. 10

由于父LinearLayout可以自己分配OnClickListener,因此问题只是如何检测GridView中其子视图之外发生的单击.您可以继承GridView并覆盖该dispatchTouchEvent()方法来完成此任务.使用该pointToPosition()方法,我们可以确定触摸事件是否发生在子视图之外,并使用接口通知侦听器是否存在.在以下示例中,OnNoItemClickListener界面提供该功能.

public class TouchyGridView extends GridView
{
    // Depending on how you're creating this View,
    // you might need to specify additional constructors.
    public TouchyGridView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    private OnNoItemClickListener listener;
    public interface OnNoItemClickListener
    {
        public void onNoItemClick();
    }

    public void setOnNoItemClickListener(OnNoItemClickListener listener)
    {
        this.listener = listener;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event)
    {
        // The pointToPosition() method returns -1 if the touch event
        // occurs outside of a child View.
        // Change the MotionEvent action as needed. Here we use ACTION_DOWN
        // as a simple, naive indication of a click.
        if (pointToPosition((int) event.getX(), (int) event.getY()) == -1
            && event.getAction() == MotionEvent.ACTION_DOWN)
        {
            if (listener != null)
            {
                listener.onNoItemClick();
            }
        }
        return super.dispatchTouchEvent(event);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的帖子:)这个解决方案真的适合我:) (2认同)

归档时间:

查看次数:

5850 次

最近记录:

8 年,3 月 前