如何进行Gridview的实现
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,如何进行Gridview的实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们知道Gridview不能设置onClickListe
千家信息网最后更新 2026年10月31日如何进行Gridview的实现
如何进行Gridview的实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
我们知道Gridview不能设置onClickListener和onLongClickListener,当GridView中出现了Blank cell,有时需要响应click事件,没有API可以调用。
AbsListView中的pointToPositon方法可以返回某个点对应的adapter中的数据position,当返回-1时,说明该点不在可见点item上,为空白区域。利用这个方法在dispatchTouchEvent中设置回调,可以解决这个问题。
以下是我实现的可以增加了onClickListener 和onLongClickListener的Gridview,有需要的可以参考一下:
import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.ViewConfiguration;import android.widget.GridView;public class ClickableGridView extends GridView { public ClickableGridView(Context context){ super(context); } public ClickableGridView(Context context, AttributeSet attrs) { super(context, attrs); } public ClickableGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } private OnNoItemClickListener clickListener; private OnNoItemLongClickListener longClickListener; private boolean mHasPerformedLongPress = false; private boolean isPressed; private CheckForLongPress checkForLongPress; public interface OnNoItemClickListener { public void onNoItemClick(); } public interface OnNoItemLongClickListener{ public void onNoItemLongClick(); } public void setOnNoItemClickListener(OnNoItemClickListener listener) { this.clickListener = listener; } public void setOnNoItemLongClickListener(OnNoItemLongClickListener longClickListener) { this.longClickListener = longClickListener; } @Override public boolean dispatchTouchEvent(MotionEvent event) { // The pointToPosition() method returns -1 if the touch event // occurs outside of a child View. if (pointToPosition((int) event.getX(), (int) event.getY()) == -1) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: isPressed = true; mHasPerformedLongPress = false; if(checkForLongPress == null){ checkForLongPress = new CheckForLongPress(); } postDelayed(checkForLongPress, ViewConfiguration.getLongPressTimeout()); break; case MotionEvent.ACTION_UP: if(!mHasPerformedLongPress){ removeCallbacks(checkForLongPress); if(clickListener != null){ clickListener.onNoItemClick(); } }else{ mHasPerformedLongPress = false; } isPressed = false; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_MOVE: default: removeCallbacks(checkForLongPress); isPressed = false; break; } } return super.dispatchTouchEvent(event); } private final class CheckForLongPress implements Runnable { @Override public void run() { if (isPressed){ if (longClickListener != null) { longClickListener.onNoItemLongClick(); mHasPerformedLongPress = true; } } } }}关于如何进行Gridview的实现问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
问题
方法
更多
帮助
解答
易行
简单易行
事件
内容
区域
小伙
小伙伴
数据
知识
空白
篇文章
行业
资讯
资讯频道
频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技图片
美国互联网保险保险科技
互联网科技公司的优势
科技和互联网公司
互联网扶贫科技
关于新基建和互联网科技
嘟嘟瓜互联网科技
火传媒上海互联网科技
掌上梦互联网科技
温州喔噻互联网科技有限公司
承德科技产业互联网发展
互联网金融科技展
互联网科技股为什么大涨
福建互联网展示科技馆设计
世界互联网科技成果奖
陕西九四连强互联网科技有限公司
保山互联网科技靠谱吗
易租星互联网科技有限公司
华人运通互联网科技公司
恒生互联网科技趋势
互联网金融 科技
极限挑战互联网科技
互联网金融科技平台
互联网 视角下的科技创新
中化能源互联网科技招聘
新兴科技互联网创新大赛颁奖典礼
中国互联网有什么科技
本届互联网大会上的黑科技
西安左小互联网科技有限公司
科技互联网专业工作会议发言稿