zoukankan      html  css  js  c++  java
  • 关于ScrollView嵌套ListView

    今天工作中需要这个,以前也写过这样的需求但是没有记录下来,今天趁机记录一下。也希望对大家工作有帮助!谢谢。

    来电与主题无关的,要实现ScrollView滚动条的隐藏,有两种方法,

    一种是在XML的ScrollView布局中加入属性android:scrollbars="none"

    另一种则是在代码中获取ScrollView后进行scroll.setVerticalScrollBarEnabled(false);

    下面来说下ScrollView如何嵌套ListView

    按常理,ScrollView套ListView会存在两个问题:

    1.里面的listView高度无法算出来,通常只能显示listview的其中一行
    2.listview不能滚动

    为什么ScrollView嵌套ListView会出现问题,只显示一个item的问题。

    这个是计算ListView高度产生的问题。

    我们可以这样解决。

    第一给ListView一个固定的高度。

    例如设置android:layout_height="200dip",那么可以解决,可能会影响美观。

    第二给ScrollView设置属性:android:fillViewport="true"
    测试的时候发现,如果ListView加载的数据不多的话,确实可以解决,但是当ListView加载的数据较多的时候,仍旧无法显示完全,并且这个时候ListView自身也无法滚动了。

    第三,我也是按照这个方法的,用代码重新测量下ListView的高度。

     1    private void initLoad() {
     2         ListLoadAdapter adapter = new ListLoadAdapter();
     3         lvLoan.setAdapter(adapter);
     4         setListViewHeightBasedOnChildren(lvLoan);
     5     }
     6     public void setListViewHeightBasedOnChildren(ListView listView) {
     7         // 获取ListView对应的Adapter
     8         ListAdapter listAdapter = listView.getAdapter();
     9         if (listAdapter == null) {
    10             return;
    11         }
    12 
    13         int totalHeight = 0;
    14         for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
    15             // listAdapter.getCount()返回数据项的数目
    16             View listItem = listAdapter.getView(i, null, listView);
    17             // 计算子项View 的宽高
    18             listItem.measure(0, 0);
    19             // 统计所有子项的总高度
    20             totalHeight += listItem.getMeasuredHeight();
    21         }
    22 
    23         ViewGroup.LayoutParams params = listView.getLayoutParams();
    24         params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    25         // listView.getDividerHeight()获取子项间分隔符占用的高度
    26         // params.height最后得到整个ListView完整显示需要的高度
    27         listView.setLayoutParams(params);
    28     }
  • 相关阅读:
    加快火狐启动速度的几种方法 Leone
    我国的社保到底是多交好,还是少交好? Leone
    “情商”和“智商”究竟有哪些区别? Leone
    Atitti 知识图谱构建方法attilax 总结
    Atitit 知识图谱的数据来源
    Atitit java 二维码识别 图片识别
    Atitit 跨平台异常处理(2)异常转换 java c# js异常对象结构比较and转换
    Atitit 异常机制与异常处理的原理与概论
    Atitti knn实现的具体四个距离算法 欧氏距离、余弦距离、汉明距离、曼哈顿距离
    屏幕取词技术实现原理
  • 原文地址:https://www.cnblogs.com/itpepe/p/4919848.html
Copyright © 2011-2022 走看看