2

カスタムActivityクラスで.onWindowFocusChanged()が呼び出されないという問題に苦労しています。私のセットアップ:

TabHost内の2つのタブ(Activity_1とActivity_2を含む)。デフォルトでは2番目のタブが選択されています。

tabHost.setCurrentTab(currentTabIndex);

両方のアクティビティで、onWindowFocusChanged()オーバーライドを追加しました(レイアウトの描画が完了した後に計算を実行する必要があるため)。

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

問題:デフォルトで2番目のタブが選択されていて、1番目のタブをクリックすると、onWindowFocusChanged()がActivity_1(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 に答える