[原]横向滑动的HorizontalListView滑动指定位置的解决方法
2015-11-11 20:21
351 查看
本文出自:http://m.blog.csdn.net/blog/lunizhu/46380215
[原]横向滑动的HorizontalListView滑动指定位置的解决方法
项目中用到了自定义横向滑动的控件:HorizontalListView,点击其中一项,跳转到另外一个大图界面,大图界面也是HorizontalListView,想使用setSelection方法设定到点击的位置,却发现这个开源的代码没有实现这个方法。解决方法如下:1、HorizontalListView中重写setSelection方法
@Override
public void setSelection(int position) {
int positionX = position * this.getWidth();
int maxWidth = this.getChildCount() * this.getWidth();
if (positionX <= 0) {
positionX = 0;
}
if (positionX > maxWidth) {
positionX = maxWidth;
}
scrollTo(positionX);
}
然后调用horizonListview.setSelection(position);方法设置显示位置。
2、运行后发现问题没有解决,this.getWidth()得到的值为0。有木有?这是因为界面还没有加载完就调用了horizonListview.setSelection(position)方法,这时候设置是不起作用的。解决方法是延迟几百毫秒再调用setSelection:
new Handler().postDelayed(new Runnable() {
public void run() {
vStepsHorizonListview.setSelection(position);
}
}, 350);
3、优化:延迟的方法效果不是很好,因为进入大图界面后界面明显卡顿一下再滑动到指定位置。而且这个毫秒数到底设置多少才合适也不得而知。所以将setSelection
方法在界面一加载完成后就调用是最合适的。所以重写onWidowFocusChanged方法:在该调用setSelection()地方先调用一下vStepsHorizonListview.setSelection(position);(这样可以省去第二步)
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
vStepsHorizonListview.setSelection(position);
}
}
这样问题就完美解决了,希望能帮助到各位!
相关文章推荐
- Python基本语法及优缺点
- Intent 拨打电话
- c++ 11 多线线程系列-----thread
- 黑马程序员-OC加强回顾-内存管理
- hdu 3033 I love sneakers!
- 32/64位操作系统&&应用程序详解(英文资料)
- 【设计模式】——单例模式
- ASP.NET Redis 开发
- Linux查看物理CPU个数、核数、逻辑CPU个数
- DOM事件
- java定时器Timer当执行时间大于间隔时间会怎样
- Hadoop之WordCount计数器程序编写并打包
- 我的Android 成长之路
- CUDA笔记(六)
- 栈的应用之算术表达式
- 解释为什么dnw中的usb有时显示ok有时显示x
- Objective C中数组排序几种情况
- 更换RatingBar图片
- 基于opencv的相机之加密解密功能实现(十三)
- Java数组