Ade*_*dem 6 user-interface android
我在android上编写了一些ui屏幕.有时我需要立即看到ui更改,但是可以在下一个ui线程请求中看到更改.所以,例如,如果我删除屏幕上的视图并以编程方式添加另一个视图,然后更改整个视图(使用viewAnimator),可以观察到删除视图,但无法观察到新视图.我确定添加了新视图,因为当我返回第一页时,屏幕上会显示新视图.
我应该调用哪个函数在屏幕上添加或删除一些视图以查看其效果immediatlety?
我尝试了invalidate(),但它对我的情况不起作用
听起来,如果你说UI只在下一个UI线程请求上更新,那么你正在修改另一个线程的UI元素.因此,您必须使用runOnUiThread在Runnable中修改它们.所以,例如:
//example code
//where you are trying to modify UI components, do this instead
runOnUiThread(new Runnable(){
public void run(){
//update UI elements
}
});
Run Code Online (Sandbox Code Playgroud)
wea*_*ire -2
没有可绘制(甚至透明)或没有子项的视图上的 invalidate() 不会被调用。您必须对所有这些进行 setBackgroundDrawable(Color.Transparent) 或在开发时添加虚拟子视图以观察变化。
另请注意,在 Android 3+ 中,渲染系统已发生变化。当您使父项无效时,子项并不总是无效。如果您想要与较低版本相同的行为,您应该手动使整个树无效