Android ListView嵌套
2015-06-01 19:45
423 查看
技术初段,还请各位多多赐教,不吝感谢。
最近做到朋友圈以及相关评论的功能,朋友圈每个item下需要实现评论列表。(做的比较简陋)
实现方案是在ListView的item下嵌套一个子ListView实现评论列表。另外一说,评论框我用的是PopupWindow做的,而不是在item下隐藏布局,不知道其他软件是如何实现的。
用到子ListView时就遇到问题了,子ListView高度的问题。可以根据子item来重新计算高度,在setAdapter方法后调用设置高度的方法setListViewHeightBasedOnChildren(mListView).
/**
* 重新计算子listview高度适配
* @param listView
*/
public static void setListViewHeightBasedOnChildren(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);
}
调用了这个方法之后,发现还有一个问题,子item评论不是一行的话,高度计算就会出错,只能计算Textview一行的高度。所以还需要重写子listview,在
不过貌似,直接使用自定义的ListView不用调用上述的设置高度的方法也能成功显示评论。
这样可以基本的完成评论列表功能。如图
最近做到朋友圈以及相关评论的功能,朋友圈每个item下需要实现评论列表。(做的比较简陋)
实现方案是在ListView的item下嵌套一个子ListView实现评论列表。另外一说,评论框我用的是PopupWindow做的,而不是在item下隐藏布局,不知道其他软件是如何实现的。
用到子ListView时就遇到问题了,子ListView高度的问题。可以根据子item来重新计算高度,在setAdapter方法后调用设置高度的方法setListViewHeightBasedOnChildren(mListView).
/**
* 重新计算子listview高度适配
* @param listView
*/
public static void setListViewHeightBasedOnChildren(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);
}
调用了这个方法之后,发现还有一个问题,子item评论不是一行的话,高度计算就会出错,只能计算Textview一行的高度。所以还需要重写子listview,在
onMeasure()方法中 将其高度设置为尽可能显示全部内容高度--
MeasureSpec.AT_MOST。代码如下:
public
class
MyListView
extends
ListView {
public
MyListView(android.content.Context context, android.util.AttributeSet attrs) {
super
(context, attrs);
}
@Override
public
boolean
dispatchTouchEvent(MotionEvent ev) {
return
super
.dispatchTouchEvent(ev);
}
@Override
protected
void
onMeasure(
int
widthMeasureSpec,
int
heightMeasureSpec) {
int
expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >>
2
,
MeasureSpec.AT_MOST);
super
.onMeasure(widthMeasureSpec, expandSpec);
}
}
不过貌似,直接使用自定义的ListView不用调用上述的设置高度的方法也能成功显示评论。
这样可以基本的完成评论列表功能。如图
相关文章推荐
- Android ListView 汇总
- Android ListView实现无限循环滚动
- Android ListView下拉刷新上拉加载更多的实现
- Android Bitmap的缓存实现再也不怕ListView多图 oom了
- Android listview 图片异步加载
- Android ListView 优化—利用converView和viewHolder
- Android ListView加载问题
- 技术-阅读器的书架实现
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- Android ListView点击行高亮(修改背景色)
- android ListView详解
- Android ListView使用BaseAdapter与ListView的优化
- Android-Universal-Image-Loader 图片异步加载类库使用方法
- Android listview与adapter用法
- Android ListView 重要的属性
- Android ListView 分类
- Android ListView 内容随着键盘弹出而向上推
- android listView 滑动加载数据 该数据是服务端获取的
- Android ListView 滑动分页
- Android ListView的常见用法