0

LabelField次のように、ディスプレイの向きに応じて、レイアウト中に(layout()メソッド内で)テキストを設定しようとしています。

LabelField roomDescLabel = new LabelField("", Field.FIELD_VCENTER) {
    protected void layout(int width, int height) {
        if (Display.ORIENTATION_LANDSCAPE == orientation) {
            setText("LANDSCAPE");
        } else {
            setText("NOT LANDSCAPE");
        }
        super.layout(width, height);
    }
};

時々、私はレイアウトメッセージの間に要求されたレイアウトでキャッチIllegalStateExceptionしています。それがまさに私がしていることなので、メッセージは理にかなっています(私は順番にレイアウトの更新を要求するものを呼び出しています)。ディスプレイの向きに応じてテキスト値を設定するための許容できる方法はありますか?setText()

この問題の解決策を見つけましたが、完全には満足していません。LabelField解決策は、マネージャーのメソッドをオーバーライドしsublayout()、既存のラベルフィールドを、更新されたテキストを含む新しいラベルフィールドに置き換えることです(を呼び出すよりもsuper.sublayout())。驚いたことに、この回避策は期待どおりに機能し、レイアウトの更新をトリガーしていません。

更新:別の可能な解決策は、のメソッドのinvokeLater()操作setText()で呼び出すことです。以前に提案したソリューションと比較したこのアプローチの欠点は、メソッドが2回呼び出されることです。layout()LabelFieldsublayout()paint()

4

0 に答える 0