我有一个LinearLayout,当单击它的一个子视图( ImageButton)时,我想更改它的背景颜色。我可以做到这一点,但不是立即--变化不会在屏幕上发生,直到稍后(我认为是在onResume调用期间)。我想知道如何在背景设置完成后,在下一行代码执行之前,强制布局重新绘制。下面是按钮的OnClickListener的onClick方法:
public void onClick(View v) {
LinearLayout parentLayout = (LinearLayout) v.getParent();
parentLayout.setBackgroundResource(R.color.my_color);
SystemClock.sleep(1000); //ms
}
sleep命令用于测试重绘是在重绘之前还是之后发生。结果是: after。关于这个主题的大多数问题(比如here和here)都建议在视图上使用invalidate()。我在后台和休眠行之间使用了命令parentLayout.invalidate();
、parentLayout.postInvalidate();
和parentLayout.refreshDrawableState();
,但都没有用。重绘仍然发生在睡眠命令之后。有人能告诉我如何让它立即发生吗?
其他可能有用的信息: LinearLayout绑定到ListView的行,上面的OnClickListener在扩展SimpleCursorAdapter的自定义类中,而不是在活动本身中。(通过这种方式,我可以为ListView中的每一行设置一个侦听器。)
https://stackoverflow.com/questions/8754709
复制相似问题