Android listview 内容布局随着键盘的出现消失,发生改变

本文解决了在键盘弹出和收回时,ListView中消息时间显示错乱的问题。通过改进代码逻辑,采用局部变量而非全局变量来比较相邻消息的时间,确保即使在键盘操作引起UI重绘的情况下,也能正确显示消息时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:如果消息的时间和上一条消息的时间差不多,就隐藏这条消息的时间。

问题:键盘出现和键盘消失,页面上的消息对应的时间会错乱,发生改变。

原因:是我自己逻辑代码写的有问题,一开始定义了一个全局变量存放上一条消息的时间,这样做就出现了问题,经过测试,发现,键盘出现,listview的高度发生改变,出现滚动条,此时adpater的getView()position顺序是:先0,1,2,3,再3,2,1,0。所以定义全局变量是行不通的,倒序的时候正好反过来了。其实可以简单点,是我复杂化了。直接获取position的数据,和position-1的数据。。这样就无所谓顺序和倒序了。就像绝对和相对的关系。。。

代码:

	// 判断时间,如果两条消息的时间相近,则第二条消息的时间隐藏
		if (position == 0) { // 默认第0个显示时间,
			viewHodler.txt_sendTime.setVisibility(View.VISIBLE);
			viewHodler.txt_sendTime.setText(msg.getSendTime());
		} else { // 大于0 的,比如3得和2比较,如果时间相同,就隐藏
			MessageEntity msg0 = getItem(position - 1);
			if (!msg.getSendTime().equals(msg0.getSendTime())) {
				viewHodler.txt_sendTime.setVisibility(View.VISIBLE);
				viewHodler.txt_sendTime.setText(msg.getSendTime());
			} else {
				viewHodler.txt_sendTime.setVisibility(View.GONE);
			}
		}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值