0

カスタムビューグループに奇妙な問題があります。

これは、ハンドラーが左右に移動するカスタムトグルボタンを表す拡張FrameLayoutです。(iPhoneスイッチトグルボタン)このハンドラーを次のコード行で移動します:

  mHandler.layout(0, 0, right, 0);

しかし、私のアクティビティの別のビューであるEditTextがフォーカスを取得すると、ソフトキーボードが表示されます。このイベントにより、カスタムビューグループが初期構成になります(カスタムビューグループを「状態オン」構成に切り替えた場合は、初期「状態オフ」構成がオンになります。

これは、Activity.onCreate()の後にレイアウトが変更されたことをシステムが記憶していないようです。

誰かが解決策を見つけましたか?

4

2 に答える 2

1

私はそれを修正しました。アクティビティが onPause などに移行しないため、onSaveInstanceState と onRestoreInstanceState については問題ではありませんでした。カスタム ビューがフォーカスを失った後、フラグ changed = false を指定して onLayout メソッドを呼び出すことに気付きました。

私が考えた最も簡単なことは、そのメソッドをこれでオーバーライドすることです:

@Override
protected void onLayout(boolean changed, int left, int top, int right,
        int bottom) {
    if( changed ){
        super.onLayout(changed, left, top, right, bottom);
    }

}

これで問題は解決しました。私のレイアウト ビューは、フォーカスを失ったときではなく、必要なときにのみ変更されます。

于 2012-06-26T15:20:26.367 に答える
0

カスタム ビューでonSaveInstanceStateonRestoreInstanceStateをオーバーライドし、内部状態を保存するために必要なことは何でも行う必要があります。

既存の View クラスから派生している場合は、インスタンスの状態を保存するために親クラスの実装を呼び出すことを忘れないでください。

于 2012-06-25T21:33:26.780 に答える