横向滑动的HorizontalListView滑动指定位置的解决方法

项目中用到了自定义横向滑动的控件:HorizontalListView,点击其中一项,跳转到另外一个大图界面,大图界面也是HorizontalListView,想使用setSelection方法设定

项目中用到了自定义横向滑动的控件: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方法:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
vStepsHorizonListview.setSelection(position);
}
}

这样问题就完美解决了,,希望能帮助到各位!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PhpZendo

使用 Laravel 5.5+ 更好的来实现 404 响应

Laravel 5.5.10 封装了两个有用的路由器方法,可以帮助我们为用户提供更好的 404 页面。现在,当抛出 404 异常时,Laravel 会显示一个漂...

972
来自专栏Windows Community

New Windows 10 SDK - Toast Notification

概述 Toast Notification 在 UWP App 中有很重要的作用,能够很大程度上增强 App 和用户之间的沟通,比如运营推广活动、版本更新、提醒...

3487
来自专栏刺客博客

鼠标左键javascript代码分享

2184
来自专栏Android先生

Android 9.0适配及部分新特性介绍

在最开始针对速贷进行Android9.0版本的适配时,我使用的是真机是vivo X21A,将targetSdkVersion升到28,运行发现网络请求全报400...

6474
来自专栏DannyHoo的专栏

利用UIPanGestureRecognizer手势全屏侧滑返回

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1292
来自专栏林德熙的博客

win10 uwp DataContext

本文告诉大家DataContext的多种绑法。 适合于WPF的绑定和UWP的绑定。 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法...

672
来自专栏何俊林

插件开发之360 DroidPlugin源码分析(四)Activity预注册占坑

在了解系统的activity,service,broadcastReceiver的启动过程后,今天将分析下360 DroidPlugin是如何预注册占坑的?本篇...

1957
来自专栏Golang语言社区

Golang语言社区--wesocket的demo(包括H5前端,GO后端)

go代码: package main import ( "flag" "fmt" "glog-master" ...

40115
来自专栏刘望舒

Android解析WindowManager(二)Window的属性

前言 在上一篇文章我们学习了WindowManager体系,了解了Window和WindowManager之间的关系,这一篇我们接着来学习Window的属性。 ...

2198
来自专栏分享达人秀

很多人不知道还有这个——搜索框组件SearchView

一、SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当用户输入完成后提交搜索时...

20110

扫码关注云+社区