立即应用 UI 更改



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

我应该调用哪个函数添加或删除屏幕上的某些视图以查看其效果即时性?

尝试了 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
    }
});
确保视图

准备就绪后立即对视图进行更改的最佳方法是将Runnable添加到视图的消息队列中:

view.post(new Runnable(){
    @Override
    public void run() {
        //TODO your code
    }
});

invalidate() 对没有可绘制对象(甚至 transparen)或没有子项的视图不被调用。您必须在 setBackgroundDrawable(Color.Transparent) 到所有这些,或者在开发中添加一个虚拟子视图来观察变化。

另请注意,在 Android 3 + 中,渲染系统已更改。当您使父项无效时,子项并不总是无效。如果您想要与较低版本相同的beahvior,则应手动使整个树失效

最新更新