Android Invalidate不会刷新整个活动

时间:2013-11-24 04:05:37

标签: android android-activity refresh invalidation

以下是我的活动中的组件:

  1. 列表视图
  2. 底栏,实际上是列表视图下的RelativeLayout。它在我的程序中动态显示或隐藏。像这样的东西
  3. 代码

    if ( condition ) {           
       bottombar.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT;               
    } else {        
       bottombar.getLayoutParams().height = 0;
    }        
    this.findViewById(android.R.id.content).invalidate();
    

    似乎invalidate()根本不起作用。如果我添加一些东西,我设置底部栏的高度。该视图根本没有刷新。滚动ListView后,它只会刷新。

    有什么想法吗?感谢

2 个答案:

答案 0 :(得分:3)

而不是invalidate(),您应该在更改相对布局的高度后调用requestLayout()

答案 1 :(得分:0)

使整个视图无效。如果视图可见,将在某个时间点调用onDraw(Canvas)。必须从UI线程调用此方法。要从非UI线程调用,请调用postInvalidate()。

ViewGroup vg = findViewById (R.id.mainLayout);
vg.invalidate();

现在,当Activity恢复时,它会使每个View都自行绘制。不需要调用invalidate()。要应用主题,请确保在绘制任何视图之前(即setContentView(R.layout.mainscreen);

之前)执行此操作