ScrollView里嵌套listview只能显示一行

结合listview、适配器adapter、sqlite动态显示sqlite数据库的内容,但一直只能显示一行,调试了半天,分别检查sqlite和commodityList都没有错,只能是getview里出错了,最后百度后发现,在侧栏中用了scrollview嵌套listview,是不兼容的,解决方法有二:

一:

1.动态计算listview的高度

    /** 
    * 动态设置ListView的高度 
    * @param listView 
    */  
    private void setListViewHeightBasedOnChildren(ListView listView) {  
        if(listView == null)   
            return;  
        ListAdapter listAdapter = listView.getAdapter();  
        if (listAdapter == null) {  
            return;  
        }  
        int totalHeight = 0;  
        for (int i = 0; i < listAdapter.getCount(); i++) {  
            View listItem = listAdapter.getView(i, null, listView);  
            listItem.measure(0, 0);  
            totalHeight += listItem.getMeasuredHeight();  
        }  
        ViewGroup.LayoutParams params = listView.getLayoutParams();  
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
        listView.setLayoutParams(params);  
    }  

说明:这个方法的话,item必须是LinearLayout,是利用LinearLayout的measure()方法来测量的,可以在子项比较少的时候用。太多的话,不适合。另外,会有个小问题:显示的时候先显示的是listview的首项,而不是scrollview的顶部。所以,视图实例后现将scrollview滑动到顶端。如下代码:

    scrollview = (ScrollView) findViewById(R.id.scrollview);  
    scrollview.smoothScrollTo(0, 0);  

2.自定义listview重写onMeasure()方法

 
    public class ListViewForScrollView extends ListView {  
        public ListViewForScrollView(Context context) {  
            super(context);  
        }  
        public ListViewForScrollView(Context context, AttributeSet attrs) {  
            super(context, attrs);  
        }  
        public ListViewForScrollView(Context context, AttributeSet attrs,  
            int defStyle) {  
            super(context, attrs, defStyle);  
        }  
        @Override  
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
            MeasureSpec.AT_MOST);  
            super.onMeasure(widthMeasureSpec, expandSpec);  
        }  
    } 

二:

不用listview,用scrollview与sqlite结合也能做出相同的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值