void invalidate()
Invalidates the entire screen.
void invalidateLayout()
Invalidates this screen's layout (including all controlled fields).
javadoc はあまり役に立ちません。なぜinvalidateLayout()が必要なのか教えていただけますか?
void invalidate()
Invalidates the entire screen.
void invalidateLayout()
Invalidates this screen's layout (including all controlled fields).
javadoc はあまり役に立ちません。なぜinvalidateLayout()が必要なのか教えていただけますか?
UIの構築方法によっては、表示を変更したいときに、レイアウトを無効にしたり、更新したりすることが必要になる場合があります。
、、、、などの標準Field
オブジェクトで構成され、あまりカスタマイズされていないUIがある場合、UIの外観を定義する作業は、主にそれらのフィールドのレイアウト方法にあります。 レイアウトとは、フィールドのサイズとその位置を設定することです。TextField
ButtonField
BrowserField
場合によっては、下位レベルで処理する必要があるUIがあります。たとえば、線の描画、領域の塗りつぶし、グラデーションの描画などを含むカスタムペイントを実行できます。この作業は通常、Field
オブジェクトのpaint()
メソッドで実行されます。場合によっては、drawFocus()
やなどの他の場所にコードを描画することもありますpaintBackground()
。
paint()
カスタムメソッドを呼び出す再描画をトリガーする場合は、それを使用invalidate()
してそれを実現します。
子フィールドを特定のサイズまたは位置に配置する新しいレイアウトをトリガーする場合は、invalidateLayout()
そのために使用できます。
ただし、これはクラスinvalidateLayout()
のメソッドであることに注意してください。またはのようなScreen
RIMScreen
サブクラスを使用する場合、それらには独自のトップレベルのデリゲートオブジェクトが付属しています。呼び出すと、そのビルトインのメソッドが呼び出されると思います。それはあなたが本当に望んでいることではないかもしれません。MainScreen
FullScreen
Manager
Screen.invalidateLayout()
sublayout()
Manager
Screen
このような独自のサブクラスを実装しない限り、次のようになります。
public class MyScreen extends Screen {
public MyScreen() {
super(new MyCustomManager());
}
}
おそらくsublayout()
、そのデリゲートマネージャーのコード(を含む)を自分で実装していません。
sublayout()
強制的に再度呼び出させたい場合は、ではなくupdateLayout()メソッドinvalidateLayout()
を使用してトリガーすることがわかりました。また、invalidateLayout()
のメソッドであるとは対照的に、Screen
すべてupdateLayout
のクラスで使用できるためManager
、更新するUI要素ツリーField
の特定の部分だけを選択できます。しかし、それは私の経験です。