美文网首页
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