android ScrollView 与listView共存冲突问题解决方法(附图)

[list]
[*][list]
[*][*] [size=medium] 最近因项目的需要,需要在ScrollView中加入ListView!这本身是非常简单的问题,但是按流程下来的时候,ListView中的数据一直没有全部显示,很纳闷,一直在找是哪里出了问题!最后一位同事提醒了我!ScorllView中放入ListView是不可以计算ListVIiew的高度的。这时才恍悟过来,查了下资料看了看!很多已经有详细的文档来做解答了![url]http://blog.csdn.net/hitlion2008/article/details/6737459[/url]这个就比较好的阐释了问题!
[*][*] 不过在这里补充一下的是;如果ListView的每个Item是单行的话,这个方法是完全可以解决的,但是如果不确定每个Iitem的行数,这个方式是计算不了ListView的高度!这个问题先抛出来,在接下来的时间会尝试解决!如果有同行可以提出更好的方法解决!大家一起讨论下!
[*][*]
[*][*]最近关于这个问题;从新规划了下思路!
[*][*] 1.设置ScrollView的一个属性android:fillViewport="true"
[*][*] 2.使用一个方法,将listview放入该方法中,来计算其高度。特别注意一点就是,这个listview的每个Iitem的布局要是LinearLayout。
[*][*]方法如下:
[*][/list]
[/list]


/**
* 重新计算ListView的高度(ScorllView 中如果再放入scrollView 是无法计算的,我们可以计算后再赋值)
* @param listView
*/
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
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);
}

最后附上项目的视图,可以在scrollView中放入listView .[/size]

你可能感兴趣的:(android)