首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在执行下一行代码之前立即强制视图重绘

如何在执行下一行代码之前立即强制视图重绘
EN

Stack Overflow用户
提问于 2012-01-06 15:27:06
回答 3查看 34.4K关注 0票数 22

我有一个LinearLayout,当单击它的一个子视图( ImageButton)时,我想更改它的背景颜色。我可以做到这一点,但不是立即--变化不会在屏幕上发生,直到稍后(我认为是在onResume调用期间)。我想知道如何在背景设置完成后,在下一行代码执行之前,强制布局重新绘制。下面是按钮的OnClickListener的onClick方法:

代码语言:javascript
复制
public void onClick(View v) {

  LinearLayout parentLayout = (LinearLayout) v.getParent();
  parentLayout.setBackgroundResource(R.color.my_color);
  SystemClock.sleep(1000); //ms

}

sleep命令用于测试重绘是在重绘之前还是之后发生。结果是: after。关于这个主题的大多数问题(比如herehere)都建议在视图上使用invalidate()。我在后台和休眠行之间使用了命令parentLayout.invalidate();parentLayout.postInvalidate();parentLayout.refreshDrawableState();,但都没有用。重绘仍然发生在睡眠命令之后。有人能告诉我如何让它立即发生吗?

其他可能有用的信息: LinearLayout绑定到ListView的行,上面的OnClickListener在扩展SimpleCursorAdapter的自定义类中,而不是在活动本身中。(通过这种方式,我可以为ListView中的每一行设置一个侦听器。)

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8754709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档