2009-06-25 4 views
2

私のアプリケーションのヘルプ/バージョン情報画面を作成しようとしていますが、私のコードはうんざりです。 (私は少しリファクタリングを使うことができると知っていますが、新しいフレームワークを使って作業するときには、コードが最初に動作し、すぐに戻ってリファクタリングして「正しく」行うことができます)。Blackberryでのアプリケーション情報/ヘルプ画面の作成

まず、私がやっていることは、それを行う正しい方法のように「感じる」ことはありません。私はレイアウトにたくさんのテキストフィールドを詰め込んでいるのか分かりません。そうする方がいいですか?

第2に、VFMが画面の大部分を占めていて、「閉じる」ボタンを押し下げています。私がしようとしているのは、タイトルと「閉じる」ボタンを表示したままで、VFMをスクロールするだけです。

どのようにこれらの問題を解決できますか?機能的に、それは罰金だが、リファクタリングのビットは少しそれをクリーンアップすることができ - - コードの場合

public class HelpScreen extends PopupScreen { 
    public HelpScreen() { 
     super(new VerticalFieldManager(), Field.FOCUSABLE); 

     /* Construct the Close button */ 
     FieldChangeListener listener = new FieldChangeListener() { 
      public void fieldChanged(Field field, int context) { 
       ok(); 
      } 
     }; 
     ButtonField b = new ButtonField("Close", Field.FIELD_HCENTER); 
     b.setChangeListener(listener); 

     /* Construct the text box containing the help */ 
     VerticalFieldManager vfm = new VerticalFieldManager(VERTICAL_SCROLL); 
     TextField f; 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     f.setText("My application does stuff. This part is the description of what it does."); 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     f.setText("Commands:"); 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     f.setText("N - New Widget"); 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     f.setText("R - Rename Widget"); 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     f.setText("D - Duplicate Widget"); 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     f.setText("C - Clear Widget"); 
     vfm.add(f = new TextField(FIELD_LEFT | READONLY)); 
     f.setText("Shift-Delete - Delete Widget"); 

     /* Construct the screen */ 
     add(new LabelField("About Widget Wiffleball", Field.FIELD_HCENTER)); 
     add(new SeparatorField()); 
     add(vfm); 
     add(b); 
    } 

    public void ok() { 
     UiApplication.getUiApplication().popScreen(this); 
    } 
} 

答えて

2

は「正しい感じ」ではないかもしれ作成するためのメソッドを作成し、テキストフィールドに移入

private TextField createTextField(String content) { 
    TextField textField = new TextField(
} 

その後、コンストラクタのその部分は次のようになります。

VerticalFieldManager vfm = new VerticalFieldManager(VERTICAL_SCROLL); 
vfm.add(createTextField("My application does stuff. This part is the description of what it does.")); 
vfm.add(createTextField("Commands:")); 
vfm.add(createTextField("N - New Widget")); 
vfm.add(createTextField("R - Rename Widget")); 
vfm.add(createTextField("D - Duplicate Widget")); 
vfm.add(createTextField("C - Clear Widget")); 
vfm.add(createTextField("Shift-Delete - Delete Widget")); 

あなたはカスタムフィールドマネージャを使用してレイアウトの問題を解決 - 本当に難しいことではありません、あなただけのマネージャーをサブクラス化し、suコマンドを実装する必要がありますblayout。 「上」、「下」、「中」の各フィールドとレイアウトを定義します(いくつかのコードは読者の練習として除外されましたが、基本的にはマネージャにフィールドを追加するときにはトップとボトムとして1次のロジックは、ボトムフィールドが常に下に貼付されており、トップ2のフィールドは下にそれをオフにプッシュしていないことを確認します。、ちょうどフレームワークを再び

protected void sublayout(int width, int height) { 
    // retrieve the top, middle and bottom fields 

    int heightRemaining = height; 

    layoutChild(topField, width, heightRemaining); 
    setPositionChild(topField, 0, 0); 

    heightRemaining -= topField.getHeight(); 

    layoutChild(bottomField, width, heightRemaining); 
    setPositionChild(bottomField, 0, height - bottomField.getHeight()); 

    heightRemaining -= bottomField.getHeight(); 

    layoutChild(middleField, width, heightRemaining); 
    setPositionChild(middleField, 0, topField.getHeight()); 
} 

を - なしエラーチェック、またはその中の何かを入力してください。次に、代理人をこの新しいマネージャに設定し、垂直フィールドマネージャを中間フィールド(指定されたセッターが必要です)に設定し、ボタンフィールドをボトムフィールドに設定します)

+0

ありがとう - 私はそれを試してみます。私はいくつかのrefactorin gは助けになるでしょう。新しいフレームワークを使って作業するとき、私はちょうど "働かせて"次に戻ってすぐにリファクタリングする傾向があります。 「気分が悪い」というのは、たくさんのテキストフィールドを使うのはちょっとハックされているという事実から来ています。一方、おそらくそれは正しい方法です。 – MikeyB

+0

これを処理するには、メイン画面のステータス部分を使うのも良い方法です。その後、カスタムマネージャーは必要ありません。 –

関連する問題