关于ListView嵌套ListView时,内层ListView动态改变的问题

项目中遇到的问题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小白,刚入行,有不对的地方望众位大牛多多指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值