项目中遇到的问题RT
需求:类似于微信朋友圈下的留言,项目中用户上传的图片可以接受留言,当留言或评论大于3条时,可以点击选择全部展示和收起实现思路:ListView嵌套。外层ListView展示图片列表,并在图片下嵌套内层ListView用于展示评论列表
问题:1、ListView嵌套时,因高度不确定,造成内层显示不全
原因:内层ListView高度不确定,造成内层显示不全解决办法:自定义ListView控件,重写onMeasure方法(目前只知道这么写可行,具体实现原理还在学习中)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 自动生成的方法存根
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
问题 2:点击“查看全部”时,内层ListView不能全部展示(Adapter.notifyDataSetChanged()方法不起作用)
原因:调用Adapter.notifyDataSetChanged()方法动态刷新ListView中数据的时候,需要改变传入的数据源(list集合),但不能改变list集合对象(不知道这么说准不准确),这样改方法才能起作用
解决办法:作为数据源的list集合不能采用重新赋值的方法改变数据,应采用clear()、addAll()等方法改变内容
final List<PrettyCommentInfo> comments = new ArrayList<PrettyCommentInfo>();
final List<PrettyCommentInfo> lessComments = new ArrayList<PrettyCommentInfo>();
PrettyCommentInfo info1 = new PrettyCommentInfo("", "", "用户1", "", "评论内容", "", "用户2", "");
PrettyCommentInfo info2 = new PrettyCommentInfo("", "", "用户3", "", "评论内容", "", "用户4", "");
PrettyCommentInfo info3 = new PrettyCommentInfo("", "", "用户3", "", "评论内容", "", "用户4", "");
PrettyCommentInfo info4 = new PrettyCommentInfo("", "", "用户5", "", "评论内容", "", "用户4", "");
comments.add(info1);
comments.add(info2);
comments.add(info3);
comments.add(info4);
if(comments.size() > 3) {
lessComments.addAll(comments.subList(0, 3));
} else {
lessComments.addAll(comments);
}
if(comments.size() > 0) {
holder.ll_hide.setVisibility(View.VISIBLE);
} else {
holder.ll_hide.setVisibility(View.GONE);
}
final PrettyCommentAdapter adapter = new PrettyCommentAdapter(lessComments, context);
holder.tv_load_all.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
lessComments.clear();
lessComments.addAll(comments);
adapter.notifyDataSetChanged();
}
});
PS:刚开始内层LIstView的两个数组、以及adapter对象,我都是采用的全局变量的方法,造成问题:“从上向下滑动外层ListView时,单击查看全部无法正常刷新数据;从下向上滑动时却能正常刷新”。改为局部变量,加final修饰符后,可以正常刷新。具体原因还没想明白。
android小白,刚入行,有不对的地方望众位大牛多多指正