您的位置:首页 > 其它

[原]横向滑动的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);

}

}

这样问题就完美解决了,希望能帮助到各位!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: