如何进行Gridview的实现
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,如何进行Gridview的实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们知道Gridview不能设置onClickListe
千家信息网最后更新 2025年11月07日如何进行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安全错误
数据库的锁怎样保障安全
果橙网络技术有限公司招聘
网络技术三级考什么
linux上数据库备份
内蒙古数据库仪器仪表规范
cups服务器打印特别慢
服务器设备维修
代码建数据库
梦幻九月新开服务器
为什么苹果服务器出现问题
数据库压力怎么解决
在网络中网关是典型的网络服务器
数据库三要素
魏书生视频软件开发
服务器搜索不出来
客户服务器计算模式优点
佛教图书馆数据库
ad数据库备份
网络安全审核运营
嵌入式软件开发智力游戏id
山东广合互联网科技有限公司
集群共用一个数据库吗
怎么开启云服务器ping
mysql数据库查看表的代码
魔兽世界 服务器 联通
网络安全知识法律法规
发改委网络安全职责
藏语翻译软件开发
阿里云服务器没有流量
关于网络安全传输协议描述
2018年网络安全作品征集