美文网首页
android ScrollView同时嵌套ListView和G

android ScrollView同时嵌套ListView和G

作者: S晔枫 | 来源:发表于2017-06-22 13:48 被阅读32次

    今天在优化项目的时候发现需要用到ScrollView同时嵌套ListView和GridView ,普通的写上去发现 ListView和GridView 都无法正常显示 (只显示一行) ,这很忧伤啊 .

    在网上找了点资料 ,问题解决了 ,在此记录下来 :

    /**
     * 自定义GridView  用于ScrollView 嵌套的问题
     * 重写GridView,让其失去滑动特性:(重写ListView也是和GridView重写的方法一  样)
     */
    public class MyGridView extends GridView {
    
        public MyGridView (Context context, AttributeSet attrs){
            super(context, attrs);
        }
    
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
            int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE     >> 2, MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, mExpandSpec);
        }
    }
    

    对于ListView 我没用上面的方法 ,我只设置ListView的高度 写的一个工具类
    /**
    * 设置ListView高度
    */
    public class ListViewUtil {

        public static void setListViewHeight(ListView listView) {
            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);
        }
    }
    

    注意 : 要在
    mList.setAdapter(listAdapter);
    listAdapter.notifyDataSetChanged(); // 后调用
    ListViewUtil.setListViewHeight(mList);

    相关文章

      网友评论

          本文标题:android ScrollView同时嵌套ListView和G

          本文链接:https://www.haomeiwen.com/subject/ucxfcxtx.html