如何进行Gridview的实现
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,如何进行Gridview的实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们知道Gridview不能设置onClickListe
千家信息网最后更新 2025年01月17日如何进行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安全错误
数据库的锁怎样保障安全
构建校园网络安全防范体系
asp数据库增删查改
excel导入pb数据库
解锁数据库某条数据
对网络技术诈骗
科技互联网论坛哪个好
为什么登微信说服务器
数据库约束出错
建立数据库表关系图
网络安全报警软件
用加速器lol连接不上服务器
月结单用什么数据库
深圳工控软件开发如何收费
我的世界行尸走肉服务器
数据库连接池如何查询
智能家居与服务器有什么区别
军人如何守好网络安全底线
男友做软件开发的给我借钱投资
客户端性能不足补充式服务器
海康存储服务器登陆不上
数据库数据精度考虑
网络技术职级
服务器上抓包
H5软件开发是什么意思
网络安全joe大宙
网络安全法管理的主要内容
怎么在数据库恢复玩家的数据
武汉专业游戏软件开发团队
sql数据库与gis
工控软件开发过程