zoukankan      html  css  js  c++  java
  • anroid中ScrollView嵌套ListView

    有时候项目里面需要ScrollView嵌套ListView,但是正常下ListView只会显示一行多一点,解决方法就是填充ListView数据后重新计算ListView的高度,这里有两种方法来实现。

    第一种方法:重写ListView

    1. package com.jwzhangjie.test;  
    2.   
    3. import android.content.Context;  
    4. import android.util.AttributeSet;  
    5. import android.widget.ListView;  
    6.   
    7. public class MyListView extends ListView{  
    8.   
    9.     public MyListView(Context context) {  
    10.         super(context);  
    11.     }  
    12.     public MyListView(Context context, AttributeSet attrs) {  
    13.         super(context, attrs);  
    14.     }  
    15.   
    16.         @Override  
    17.         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
    18.                 int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
    19.                                 MeasureSpec.AT_MOST);  
    20.                 super.onMeasure(widthMeasureSpec, expandSpec);  
    21.         }  
    22. }  

    第二种方法:添加完数据后计算ListView中所有Item的高度和间隔线的高度然后重新设置ListView的高度

    1. public void setListViewHeightBasedOnChildren(ListView listView) {  
    2.         ListAdapter listAdapter = listView.getAdapter();  
    3.         if (listAdapter == null)  
    4.             return;  
    5.         if (listAdapter.getCount() <= 1)  
    6.             return;  
    7.   
    8.         int totalHeight = 0;  
    9.         View view = null;  
    10.         for (int i = 0; i < listAdapter.getCount(); i++) {  
    11.             view = listAdapter.getView(i, null, listView);  
    12.             view.measure(0,0);  
    13.             totalHeight += view.getMeasuredHeight();  
    14.         }  
    15.         ViewGroup.LayoutParams params = listView.getLayoutParams();  
    16.         params.height = totalHeight  
    17.                 + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
    18.         listView.setLayoutParams(params);  
    19.         listView.requestLayout();  
    20.     }  


    设置完数据后,调用setListViewHeightBasedOnChildren(listview);

    注意:ListView的item只能使用LinearLayout包含

  • 相关阅读:
    Masonry介绍与使用实践:快速上手Autolayout
    iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
    FMDB的使用方法
    ViewController的生命周期分析和使用
    使用Xcode7的Instruments检测解决iOS内存泄露
    IOS比较常用的第三方组件及应用源代码(持续更新中)
    SDWebImage的简单使用
    ant编译tomcat-web项目
    git命令记录
    zabbix问题恢复正常,但是图表中还是显示故障存在
  • 原文地址:https://www.cnblogs.com/jasonxcj/p/5052416.html
Copyright © 2011-2022 走看看