我有以下问题.我有一个GridView内部LinearLayout如下图所示.我想在用户点击GridView图像中的空白区域时检测点击事件,我想要的位置是红色区域,也是绿色区域内.
但我有以下问题.
onClickListener为GridView:错误,因为适配器不能添加Click事件.onItemClickListener了GridView:我只是可以检测存在的项目(在图像中的白框)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)
| 归档时间: |
|
| 查看次数: |
5850 次 |
| 最近记录: |