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包含

  • 相关阅读:
    没用完的手机流量是否清零?讨论+吐槽
    南方周末:《系统》
    如何将Excel表批量赋值到ArcGIS属性表
    解决4K屏电脑显示问题
    坐标或测量值超出范围
    快速手工实现软件著作权源码60页制作
    SVN版本更新自动通知提醒
    1130不允许连接到MySql server
    Win10中SVN图标不显示的解决
    注意地理坐标系下的距离和面积计算
  • 原文地址:https://www.cnblogs.com/jasonxcj/p/5052416.html
Copyright © 2011-2022 走看看