您的位置:首页 > 其它

关于ListView和ScrollView冲突问题的解决方案

2016-04-09 23:57 337 查看
有时,我们会遇到这样的情况:在一个布局里既有ListView,又有ScrollView,且ScrollView包含ListView,这是会出现数据显示不全,最多可能只显示1~2条的情况。(注:通常,ScrollView里边包含列表视图或网格视图时,也都会出现冲突问题。)

该如何解决这个问题呢?

首先,要知道ScrollView的关键点--滚动视图,只能容纳一个子控件,通常放线性布局。

这里,给出2种解决方案:

第一种:

1、重写ListView的onMeasure函数

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int specHeight = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, specHeight);

}

2、解决默认显示listView顶部的问题

mListView.setFocusable(false);

这是代码量最少的一种处理方式,用的是自定义的listView方式,复写onMeasure(),

重新计算了高度。

第二种:

在设置Adapter后,重新调用下面的方法计算ListView的高度。

注:该方法要求子项根布局必须是线性布局。

关键代码:

public void setListViewHeight(ListView listView){

ListAdapter adapter = listView.getAdapter();

int totalHeight = 0;

for(int i=0; i<adapter.getCount(); i++){

View listItem = adapter.getView(i, null, listView);

listItem.measure(0, 0); //重新计算子项的宽高

totalHeight += listItem.getMeasuredHeight();

}

ViewGroup.LayoutParams params = listItem.getLayoutParams();

params.height = totalHeight + (listItem.getDividerHeight() * (adapter.getCount()-1));

listView.setLayoutParams(params);

}

写一个方法,用来接收列表视图控件,该方法里要做的事:将高度重新计算一下,并将其高度设置给列表视图,获取列表视图的适配器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: