質問

ちょっと私の画面には、編集フィールドと2つのカスタムボタンフィールドが「OK」と「キャンセル」ボタンフィールドがあります。

編集フィールドに名前を書いてEnterを押すと、フォーカスが「OK」ボタンに移動しますが、フォーカスを「キャンセル」ボタンに設定する方法を教えてください。

さらに、スクロール中にフォーカスが自動的に先に進みません。

タッチイベントとその処理に混乱している可能性があります。

親切に助けてください!!!!!!!!!!!!

コード:

        txt_Name = new EditField(TextField.NO_NEWLINE)
            {
                public void paint(net.rim.device.api.ui.Graphics g)
                {
                    g.setColor(Color.MAROON);
                    super.paint(g);
                }
           };

            txt_Name.setFont(font);

     v1 =  new VerticalFieldManager();
     v1.add(txt_Name );


    ButtonField btn1 = new ButtonField("OK",ButtonField.CONSUME_CLICK);
    ButtonField btn2 = new ButtonField("CANCEL",ButtonField.CONSUME_CLICK);

     v2 =  new VerticalFieldManager();
     v2.add(btn1);
     v2.add(btn2);

    LabelField l1 = new  LabelField("Hello Moon ",Field.Focussable);
    LabelField l2 = new  LabelField("Hello Citizen",Field.Focussable);
    LabelField l3 = new  LabelField("Hello People",Field.Focussable);
    LabelField l4 = new  LabelField("Hello world",Field.Focussable);

     v3 =  new VerticalFieldManager();
     v3.add(l1);
     v3.add(l2);
     v3.add(l3);
     v3.add(l4);

    add(v1);
    add(v2);
    add(v3);
}


protected boolean navigationClick(int status, int time) 
    {
     if(OK.isFocus())
             {
                //execute some code
                return true;
             }
if(CANCEL.isFocus())
             {
                //execute some code
                return true;
             }
        }
役に立ちましたか?

解決 2

    txt_Name = new EditField(TextField.NO_NEWLINE)
            {
                public void paint(net.rim.device.api.ui.Graphics g)
                {
                    g.setColor(Color.MAROON);
                    super.paint(g);
                }
           };

            txt_Name.setFont(font);

     v1 =  new VerticalFieldManager();
     v1.add(txt_Name );


    ButtonField btn1 = new ButtonField("OK",ButtonField.CONSUME_CLICK);
    ButtonField btn2 = new ButtonField("CANCEL",ButtonField.CONSUME_CLICK);

     h2 =  new HorizontalalFieldManager();
     h2.add(btn1);
     h2.add(btn2);

    LabelField l1 = new  LabelField("Hello Moon ",Field.Focussable);
    LabelField l2 = new  LabelField("Hello Citizen",Field.Focussable);
    LabelField l3 = new  LabelField("Hello People",Field.Focussable);
    LabelField l4 = new  LabelField("Hello world",Field.Focussable);

     v3 =  new VerticalFieldManager();
     v3.add(l1);
     v3.add(l2);
     v3.add(l3);
     v3.add(l4);

    add(v1);
    add(h2);
    add(v3);
}


protected boolean navigationClick(int status, int time) 
    {
int index = h2.getFieldwithFocusIndex();
     if(h2==0)
             {
                //execute some code for OK
                return true;
             }
if(h2==1)
             {
                //execute some code for cancel
                return true;
             }
        }

他のヒント

Mark が提案したように、ボタンごとに個別の FieldChangeListeners を作成しました。

class Scr extends MainScreen {
    EditField txt_Name;
    ButtonField btnOK;
    ButtonField btnCancel;
    VerticalFieldManager v1;
    VerticalFieldManager v2;
    VerticalFieldManager v3;
    Font font = Font.getDefault().derive(Font.BOLD, 20);

    public Scr() {
        txt_Name = new EditField(TextField.NO_NEWLINE) {
            public void paint(net.rim.device.api.ui.Graphics g) {
                g.setColor(Color.MAROON);
                super.paint(g);
            }
        };

        txt_Name.setFont(font);

        v1 = new VerticalFieldManager();
        v1.add(txt_Name);

        btnOK = new ButtonField("OK", ButtonField.CONSUME_CLICK);
        btnOK.setChangeListener(
            new FieldChangeListener(){
                public void fieldChanged(Field field, int context) {
            Dialog.inform("OK pressed");
        }});
        btnCancel = new ButtonField("Cancel", ButtonField.CONSUME_CLICK);
        btnCancel.setChangeListener(
            new FieldChangeListener(){
                public void fieldChanged(Field field, int context) {
            Dialog.inform("Cancel pressed");
        }});
        v2 = new VerticalFieldManager();
        v2.add(btnOK);
        v2.add(btnCancel);

        LabelField l1 = new LabelField("Hello Moon", Field.FOCUSABLE);
        LabelField l2 = new LabelField("Hello Citizen", Field.FOCUSABLE);
        LabelField l3 = new LabelField("Hello People", Field.FOCUSABLE);
        LabelField l4 = new LabelField("Hello world", Field.FOCUSABLE);

        v3 = new VerticalFieldManager();
        v3.add(l1);
        v3.add(l2);
        v3.add(l3);
        v3.add(l4);

        add(v1);
        add(v2);
        add(v3);
    }
}

今は大丈夫のようです:
代替テキスト http://img40.imageshack.us/img40/6472/textentered.jpg 代替テキスト http://img59.imageshack.us/img59/7574/okpressed.jpg 代替テキスト http://img641.imageshack.us/img641/9246/cancelpressed01.jpg

アップデート

Storm シミュレータでは、マウスのクリックを使用してこれらのボタンをクリックできます。シミュレーターのcodファイルが古いバージョンのものであるという以外の説明が見つかりません。コード内のラベル テキストを変更することですぐに確認でき、その後デプロイして、この変更がデバイス上のアプリに適用されるかどうかを確認できます。そうでない場合は、これは古いバージョンであるため、シミュレーターをクリーンアップしてアプリをもう一度デプロイする必要があります。
これがお役に立てば幸いです!
こちらも参照 BlackBerry - 変更がアプリに反映されません

あなたは、大丈夫のようにフォーカス可能フィールドを含む画面またはマネージャの「navigationMovement」メソッドをオーバーライドすることで、フォーカス順序を制御し、ボタンをキャンセルすることができます。ただ、そのメソッドに渡す引数、Field.setFocusを(使用して目的のフィールド上のセットフォーカス)を評価し、trueを返します。

スクロールを進めていないフォーカス用として - だけの方法タッチスクリーンUIの作品です。あなたがフォーカス可能なフィールドにタッチフォーカスが唯一の移動 - 。そう、あなたが「フリック」スクロールする画面、フォーカスが変更されないとき任意のフォーカス可能なフィールドに触れていない場合は、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top