我在android上编写了一些ui屏幕。有时我需要立即看到ui更改,但可以在下一个ui线程请求中看到更改。所以,例如,如果我删除屏幕上的视图并以编程方式添加另一个视图,然后更改整个视图(使用viewAnimator),可以观察到删除视图,但无法观察到新视图。我确定添加了新视图,因为当我返回第一页时,屏幕上会显示新视图。
我应该调用哪个函数在屏幕上添加或删除一些视图以查看其影响immediatlety?
我尝试了invalidate(),但它对我的情况不起作用
答案 0 :(得分:6)
听起来,如果你说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
}
});
答案 1 :(得分:2)
确保在视图准备就绪后立即对视图进行更改的最佳方法是向视图的消息队列添加Runnable
:
view.post(new Runnable(){
@Override
public void run() {
//TODO your code
}
});
答案 2 :(得分:-2)
对没有可绘制(甚至是透明)或没有子节点的视图的invalidate()不会被调用。 您必须在setBackgroundDrawable(Color.Transparent)中为所有这些或在开发时添加一个虚拟子视图以观察更改。
另请注意,在Android 3 +上,渲染系统已发生变化。当您使父项无效时,子项并不总是无效。如果您想要与较低版本相同的行为
,则应手动使整个树无效