我正在努力解决自定义活动类中没有调用.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);
}