Gallery在不可见情况下,onscroll造成的空指针异常

本文详细介绍了如何将轮播Gallery组件集成到ListView中,并解决了滚动冲突导致的错误问题。通过设置Gallery的间距和滚动监听方法,确保了组件之间的正常交互与功能实现。

原本是做个listview,然后listView.addHeaderView(Gallery)

而且header的Gallery要一直循环轮播

这是轮播关键代码

// gallery设置spacing(间隙)后,需scroll比spacing距离稍大的位置,才能onkeydown,否则onkeydown不生效。
gallery.onScroll(null, null, 1, 0);
gallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);


补充下:因为gallery图片间会有叠加出现,所以要在xml中设置下spacing间隙距离。但是设置了spacing,由于有间隙,所以onkeydown方法无法使用,需要先滚动到比spacing距离稍大点位置,才能播放下一张。


在滚动listView的时候,当gallery完全不可见后,会报错


Gallery.onScroll这个方法报错,起初以为是gallery空了,但是测试发现并不是。

错误指向1008行,所以去看了下源码


源码中child已经进行了判断,所以哪里报空指针成了我心底的谜。

后来,看源码看到了。Gallery的一个方法,isShown();看见这方法,顿时乐开了。功能如其名。判断gallery当前是否显示

这是解决方法

if (gallery != null && gallery.isShown()) {
                            // gallery设置spacing(间隙)后,需scoll比spacing距离稍大的位置,才能onkeydown,否则onkeydown不生效。
                            gallery.onScroll(null, null, 1, 0);
                            gallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
                        }


在前端页面上,如果你想在用户未点击某个元素的情况下触发一个弹窗,你可以利用JavaScript事件监听技术,尤其是`<body>`标签或者全局的`window`对象。通常使用的是`ontouchstart`, `onmouseover` 或者 `onscroll` 等事件。下面是一个简单的示例,当用户滚动页面时,弹出一个提示: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>页面弹窗示例</title> <style> /* 遮罩层样式 */ .overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: none; z-index: 999; } /* 弹窗样式 */ .popup { /* 根据实际需求定制 */ position: absolute; color: white; text-align: center; font-size: 16px; } </style> </head> <body onscroll="showPopup()"> <div class="overlay" id="overlay"></div> <div class="popup" id="popup">内容提示</div> <script> function showPopup() { document.getElementById('overlay').style.display = 'block'; document.getElementById('popup').style.top = window.pageYOffset + 'px'; // 获取滚动距离 setTimeout(() => { // 这里可以添加动画效果或者延时关闭 document.getElementById('overlay').style.display = 'none'; }, 2000); // 关闭时间可根据需要调整 } </script> </body> </html> ``` 在这个例子中,当你滚动页面时,`onscroll` 事件会触发 `showPopup` 函数,显示遮罩层和弹窗。请注意,这只是一个基本示例,实际应用可能需要考虑更多的交互设计和兼容性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值