zoukankan      html  css  js  c++  java
  • 完美解决ListView 与 ScrollView 共存问题

    1:首先设置ListView的高度,在setAdapter之后调用此方法。

    public static void setListViewHeightBasedOnChildren(ListView listView) {
            ListAdapter listAdapter = listView.getAdapter();
            if (listAdapter == null) {
                   return;
            }
            
            int totalHeight = 0;
            int len = listAdapter.getCount();
            for (int i = 0; i < len; i++) {   
                   View listItem = listAdapter.getView(i, null, listView);
                   listItem.measure(0, 0);  //计算子项View 的宽高
                   totalHeight += listItem.getMeasuredHeight();  //统计所有子项的总高度
            }
            
            ViewGroup.LayoutParams params = listView.getLayoutParams();
    
            params.height =totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
            
            listView.setLayoutParams(params);
        }

    2:如果ListView中的数据是单行的以上代码没有问题,如果Item行数不固定则要重写ListView的onMeasure方法重新计算每个Item的高度。

    public class WListView  extends ListView{
    
        public WListView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
        }
    
        public WListView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            // TODO Auto-generated constructor stub
        }
    
        public WListView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
        
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            //根据模式计算每个child的高度和宽度
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
        }
    }

    这样就解决了。

    在使用的时候通过多态的方式进行。例如:

    (1) activity_xxsd.xml

    <com.wzh.view.WListView
    android:background="@drawable/xxsd_content_bg"
    android:id="@+id/lvXxsdZxtzTitles"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

    (2) XxsdActivity.java

    private ListView lvXxsdZxtzTitles = null;

    ...

    lvXxsdZxtzTitles=(WListView)findViewById(R.id.lvXxsdZxtzTitles);

  • 相关阅读:
    .net Dapper 学习系列(1) ---Dapper入门
    ASP.NET WebApi 学习与实践系列(2)---WebApi 路由请求的理解
    ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi
    Sqlserver 总结(2) 存储过程
    Image.Save出错 GDI 一般错误
    python导入模块的两种方式
    从1KW条数据中筛选出1W条最大的数
    C# EF更新当前实体报错 ObjectManager无法管理具有相同键值的多个对象
    微信小程序 异步请求拿数据+使用外部js库
    微信小程序入门 第一个页面搭建
  • 原文地址:https://www.cnblogs.com/yshyee/p/3462637.html
Copyright © 2011-2022 走看看