setLayoutParams有时会没有效果是怎么回事

raphael55 2011-06-22 01:50:33
vv是listView里面的一个itemview

ViewGroup.LayoutParams params = vv.getLayoutParams();
params.height = height;
vv.setLayoutParams(params);

我在这段代码前,后分别打印出了height,vv.getHeight();
大多数时候2个值是一直的,说明setLayoutParams是成功的(设置前的vv.getHeight()和设置后的vv.getHeight()是改变了的)

但是偶尔会出现设置前vv.getHeight() == 设置后vv.getHeight()的现象(height与vv.getHeight()不等)
说明setLayoutParams失败了?但是这个函数的返回值是void啊。。
也没说有失败的情况。
我本想着在外面加个while do
直到设置成我需要的值才跳出该段代码,实际效果是会出现timeout的现象

求原因 求解决方法

...全文
3724 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liongname 2012-11-10
  • 打赏
  • 举报
回复
引用 4 楼 liongname 的回复:
引用 3 楼 raphael55 的回复:已解决 问题应该是ui不是每次设置进去了马上就刷新的 所以再次get的高度可能不正确 只要在设置完之后强制刷新下就可以了 强制刷新?调用invalidate()?
========================================= 已解决: mView.post(new Runnable() { @Override public void run() { mView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } });
liongname 2012-11-10
  • 打赏
  • 举报
回复
引用 3 楼 raphael55 的回复:
已解决 问题应该是ui不是每次设置进去了马上就刷新的 所以再次get的高度可能不正确 只要在设置完之后强制刷新下就可以了
强制刷新?调用invalidate()?
raphael55 2011-06-22
  • 打赏
  • 举报
回复
已解决
问题应该是ui不是每次设置进去了马上就刷新的
所以再次get的高度可能不正确
只要在设置完之后强制刷新下就可以了
madFatso 2011-06-22
  • 打赏
  • 举报
回复
vv.setLayoutParams(new LayoutParams(width,height));
试试
raphael55 2011-06-22
  • 打赏
  • 举报
回复
设置后马上取得的vv.getHeight();
好像不可信。。
刚才发现过段时间再取次的值
可能就正确了
但是这段代码所在的函数是被频繁调用的。。(0.1s以内)

80,469

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧