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

  • 相关阅读:
    android在开发过程中的数据库存储位置
    JSONArray的初始化的形式
    Android中asset文件夹与raw文件夹的区别深入解析(转)
    Android 建立Menu选单&&onOptionsItemSelected (转)
    onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单
    thrift框架
    64 位 win7 使用PLSQL Developer(转)
    Java-->服务器的响应(Servlet--doGet&doPost)
    JAVA printWriter中write()和println()区别
    JavaWeb学习总结(六)—HttpServletResponse
  • 原文地址:https://www.cnblogs.com/yshyee/p/3462637.html
Copyright © 2011-2022 走看看