我正在努力解决自定义活动类中没有调用.onWindowFocusChanged()的问题。我的设置:
tabhost中有两个选项卡(包含activity_1和activity_2),默认情况下第二个选项卡处于选中状态:

tabHost.setCurrentTab(currentTabIndex);

在这两个活动中,我都添加了onWindowFocusChanged()重写(因为我需要在布局完成绘图后执行计算):
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);
}

问题是:当默认选中第二个选项卡,并且我单击第一个选项卡时,在活动1(与第一个选项卡关联)中永远不会调用onWindowFocusChanged()。
两种活动都扩展了正常活动类。
任何关于如何解决这个问题的线索都将非常感谢!

最佳答案

如果需要等到绘制特定视图然后进行计算,可以使用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
}}

编辑:
感谢爱迪生提供的更多细节。
对于那些希望支持api
if (Build.VERSION.SDK_INT >= 16) {
    mainLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
    mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}

09-11 20:13