1

私はブラックベリーカーブ8300に取り組んでいます

メイン画面にいくつかのコンポーネントを追加しました。トラックボールが上下に移動するとフォーカスを垂直に移動し、トラックホイールが左右に移動するとフォーカスを水平に移動します。

================================================== ================================

--Title area that contains a focusable field(BACK)--
--Non focusable Label field that indicates the name of the user--
--A horizontal field manager1 that contains 4 buttons--
--A horizontal field manager2 that contains 4 buttons--
--A horizontal field manager2 that contains 4 buttons--

================================================== ================================

ここで、現在フォーカスが BACK ボタンにあり、トラック ホイールを下にスクロールすると、フォーカスが manager1 の 1 番目のボタンに来るはずです。再び下にスクロールすると、フォーカスは manager1 の 2 番目のボタンではなく、manager2 の 1 番目のボタンに来るはずです(デバイス上で発生しているため)

私のコードは:::

protected boolean trackwheelRoll(int amount, int status, int time) 
{
 focusIndex = this.getFieldWithFocusIndex();
 System.out.println("focus index ::::::::::::::::"+focusIndex);
 Field f;
 if(focusIndex!=0)
 {
   if(amount==-1)
   {
    //move up
       if(focusIndex>=0)
       {
        focusIndex = focusIndex-1;
         f = getField(focusIndex);
         f.setFocus();      
       }
   }
   if(amount==1)
   {
    //moving down
        if(focusIndex<=3)
        {
           f = getField(++focusIndex);
           f.setFocus();
        }
   }
     }
 return super.trackwheelRoll(amount, status, time);
}

このコントロールがシミュレーターで突然移動した後でも、デバイスでは変更が行われませんでした

4

2 に答える 2

2

trackwheelRoll の代わりに [navigationMovement][1] メソッドをオーバーライドしてみてください。「dx」パラメータと「dy」パラメータにアクセスできるため、上下にスクロールしているか左右にスクロールしているかがわかります。trackwheelRoll メソッドは、トラックホイール デバイスがなくなったため、やや古風になっています。

[1]: http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/ui/Manager.html#navigationMovement(int , int, int, int)

于 2010-04-30T15:39:19.173 に答える
1
protected boolean navigationMovement(int dx, int dy, int status, int time) 
 {
    Field f;
    int index;
    focusIndex = this.getFieldWithFocusIndex();
    if(focusIndex==1)
    {
        f = getField(focusIndex);

        Manager m = (Manager)f;
        index = m.getFieldWithFocusIndex();
        if(dx==-1)
        {
            index = index--;
            if(index>=0)
              {
                f = m.getField(index);
                f.setFocus();
              }
        }
        if(dy==-1)
        {
            index = index-3;
            if(index>=0)
              {
                f = m.getField(index);
                f.setFocus();
              } 
        }
        if(dx==1)
        {
            index = index++;
            if(index<=19)
              {
                f = m.getField(index);
                f.setFocus();
              } 
        }
        if(dy==1)
        {
            index = index+3;
            if(index<=19)
              {
                f = m.getField(index);
                f.setFocus();
              } 
        }
    }
    return super.navigationMovement(dx, dy, status, time);
}
于 2010-05-01T06:18:28.880 に答える