zoukankan      html  css  js  c++  java
  • 横向滑动的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);
    }
    }

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

  • 相关阅读:
    P1410 子序列
    P1395 会议 (树形dp)
    P2580 于是他错误的点名开始了
    LC1127. 用户购买平台
    LC 1308. Running Total for Different Genders
    P1340 兽径管理 (最小生成树)
    P1330 封锁阳光大学 (二分图染色)
    CF1296F Berland Beauty (Tree, dfs/bfs, LCA)
    顺丰的Cookie条款
    服务器判断客户端的用户名和密码(token的身份验证)
  • 原文地址:https://www.cnblogs.com/pangguoming/p/5938827.html
Copyright © 2011-2022 走看看