2

我正在努力解决在我的自定义 Activity 类中没有调用 .onWindowFocusChanged() 的问题。我的设置:

TabHost 中的两个选项卡(包含 Activity_1 和 Activity_2),其中默认选择第二个选项卡:

tabHost.setCurrentTab(currentTabIndex);

在这两个活动中,我添加了 onWindowFocusChanged() 覆盖(因为我需要在布局完成绘制后执行计算):

@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);
}

问题:当默认选择第二个选项卡并单击第一个选项卡时,onWindowFocusChanged() 永远不会在 Activity_1 (与第一个选项卡关联)中调用。这两个活动都扩展了正常的活动类。

任何有关如何解决此问题的线索将不胜感激!

4

1 回答 1

12

如果您需要等到特定视图被绘制然后进行计算,您可以使用 viewTreeObserver 来监听布局更改并在那里进行计算。像这样使用它:

ViewTreeObserver vto = mainLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
    // remove the listener so it won't get called again if the view layout changes
    mainLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    // add your calculations here
}}

编辑:

感谢 Edison 提供的更多详细信息。

对于那些想要支持API < 16的人,你可以这样做

if (Build.VERSION.SDK_INT >= 16) {     
    mainLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
} else { 
    mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
}
于 2012-06-21T14:29:10.670 回答