立即申请ui更改

Ade*_*dem 6 user-interface android

我在android上编写了一些ui屏幕.有时我需要立即看到ui更改,但是可以在下一个ui线程请求中看到更改.所以,例如,如果我删除屏幕上的视图并以编程方式添加另一个视图,然后更改整个视图(使用viewAnimator),可以观察到删除视图,但无法观察到新视图.我确定添加了新视图,因为当我返回第一页时,屏幕上会显示新视图.

我应该调用哪个函数在屏幕上添加或删除一些视图以查看其效果immediatlety?

我尝试了invalidate(),但它对我的情况不起作用

den*_*rew 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
    }
});
Run Code Online (Sandbox Code Playgroud)


wea*_*ire -2

没有可绘制(甚至透明)或没有子项的视图上的 invalidate() 不会被调用。您必须对所有这些进行 setBackgroundDrawable(Color.Transparent) 或在开发时添加虚拟子视图以观察变化。

另请注意,在 Android 3+ 中,渲染系统已发生变化。当您使父项无效时,子项并不总是无效。如果您想要与较低版本相同的行为,您应该手动使整个树无效