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);

  • 相关阅读:
    VScode中Python的交互式命令环境使用笔记
    jmeter beanshell判断响应的json串,参数的值是否正确;
    类和类的继承 实现关系;
    类与类依赖关系,实例;
    类与类包含关系,实例;
    java中有package的编译执行;java编译乱码;
    java 类与类之间的关系,方法重写与方法重载的区别
    beanshell sampler构造响应数据;
    Scanner类及其中方法的使用;
    java 构造方法 代码块 this
  • 原文地址:https://www.cnblogs.com/yshyee/p/3462637.html
Copyright © 2011-2022 走看看