首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

ListView内部的ListView的处置

2012-07-26 
ListView内部的ListView的处理对于ListView内部的ListView,一般用来展示少量的列表数据。内部的ListView的

ListView内部的ListView的处理

对于ListView内部的ListView,一般用来展示少量的列表数据。

内部的ListView的高度看起来是一个固定值且无法滑动,这个就比较蛋疼了。、

提供两种解决方案,方案的核心都是重新设置内部ListView的高度。

1 ?通过定制组件,重新写一个控件,继承于ListView.

?

public class CustomisedListView extends ListView{

?

public CustomisedListView(Context context) {

super(context);

}

?

public CustomisedListView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

?

public CustomisedListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

?

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, ?

? ? MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

}

然后将这个组件作为外部ListView的Item的一部分或全部就可以了。

2 ?直接在代码中指定内部ListView的高度

这个也分为两种情况:

A 计算出内部ListView中的所有Item的高度

?

public static void reSetListViewHeight(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);

}

这样就可以重新设置ListView的高度了

B预估出内部ListView每个Item的高度,直接写死,但感觉不如上面的好,上面的也有要求,内部ListView的Item一定得是LinearLayout

?

?

?

?

?

热点排行