android ScrollView同时嵌套ListView和G

2017-06-22  本文已影响32人  S晔枫

今天在优化项目的时候发现需要用到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);

上一篇下一篇

猜你喜欢

热点阅读