1

シンプルなチャット機能を備えたBlackBerryアプリケーションを開発しました。Vertical Field Manager (VFM)ユーザーがをクリックすると、チャットメッセージが内に表示されますSend。ユーザーは複数のメッセージを送信できます。送信されたすべての新しいメッセージは、古いメッセージの下に表示されます。このように、Vertical Field Managerキープのサイズは増え続けます。スクロール可能なものを作成したVFMので、ユーザーは下にスクロールして送信された最新のメッセージを表示できます。メッセージが送信されたときにVFMの一番下まで自動スクロールして、最後のメッセージにフォーカスが設定されるようにすることはできますか?

私も電話をかけてみvfm.setVerticalScroll(int y);ましLabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT|Field.FOCUSABLE);たが、これは役に立ちません。ご案内ください。

vr2=垂直フィールドマネージャー

chat1=チャットメッセージがVFMに追加されました


編集: StackOverFlowでこのリンクに出くわし、次のようにコードに変更を適用しました:

vr2.setVerticalScroll(vr2.getVirtualHeight());
LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT)
{
 protected void applyTheme(Graphics g, boolean arg1) 
     {
        g.setColor(Color.DEEPSKYBLUE);
        super.applyTheme(g, arg1);
     }
};
Font myFont = Font.getDefault().derive(Font.BOLD, 8, Ui.UNITS_pt);
chat1.setFont(myFont);
chat1.setBorder( leftBorder );
chat1.setMargin( 0, 0, -15, 0);
vr2.setBorder(bdr);
vr2.add(chat1);
Field f;
int i = vr2.getFieldCount();
f = vr2.getField(i-1);  //getFieldCount, gets total number of fields
f.setFocus();

これにより、私が探しているソリューションに非常に近づくことができました。VFMは下にスクロールしています。ただし、VFMの最後のメッセージに配置する代わりに、毎回最後から2番目のメッセージにスクロールします。なんでそうなの?VFMの最後のメッセージまでスクロールする必要があります。VFMの一番下にあります。

4

1 に答える 1

2

私はついにこれを解決することができました。そのような問題で立ち往生している他の人がいる場合に備えて、私の答えを共有します。上記の質問の編集は解決策に近づくのに役立ちましたが、間違いはvr2.setVerticalScroll(vr2.getVirtualHeight());適切な場所に電話をかけなかったことにあることがわかりました。

詳細については、stackoverflowでこの質問を確認し、ブラックベリーサポートフォーラムでこれを確認してください。解決策は次のとおりです。

LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT)
{
 protected void applyTheme(Graphics g, boolean arg1) 
     {
        g.setColor(Color.DEEPSKYBLUE);
        super.applyTheme(g, arg1);
     }
};

Font myFont = Font.getDefault().derive(Font.BOLD, 8, Ui.UNITS_pt);
chat1.setFont(myFont);
chat1.setBorder( leftBorder );
chat1.setMargin( 0, 0, -15, 0);
vr2.setBorder(bdr);
vr2.setVerticalScroll(vr2.getVirtualHeight()); //scrolls to the bottom of the vertical field manager
vr2.add(chat1);
Field f;
int i = vr2.getFieldCount();
f = vr2.getField(i-1);  //getFieldCount, gets total number of fields
f.setFocus(); //sets focus on the newly added field
于 2013-03-27T13:58:02.927 に答える