私はフィールドの外で/タッチを押すと、フォーカスがあるフィールドに対してfieldChanged()
イベントがトリガーされる問題があります。私はどちらかFieldManager
の内側にボタン/フィールドを押すとBlackBerry touchEvent from Field triggers fieldChanged
public class myMainScreen extends MainScreen implements FieldChangeListener{
public myMainScreen(){
CustomFM1 fm1 = new CustomFM1();
CustomFM2 fm2 = new CustomFM2();
add(fm1);
add(fm2);
}
}
はそれが正常に動作します:私のMainScreen
ため
レイアウトは、かなりまっすぐ進むので、のようなものです。問題は私が空きスペースを押すときです。だから、私がfm2
の空きスペースを押しての中にfm1
があると、そのフィールド変更イベントが発生します。
現時点では、私の救済策はtouchEvent
にキャッチして、適切なFieldManager
に渡すことです。 touchEvent
フィールドが実際に
を押された場合、私のCustomFM
は、そのようにmyMainScreen
にタッチイベントは次のようになり、フィールドを取得し、fieldChangedを呼び出す扱うでしょうのために:
protected boolean touchEvent(TouchEvent message){
int index = this.getFieldAtLocation(message.getX(1), message.getY(1));
switch(index){
case 0:
fm1.touchEvent(message);
break;
case 1:
fm2.touchEvent(message);
break;
}
return true;
}
そして、私のCustomFM2のための私のtouchEvent
です。 OFFSET
は、画面に対してfm2の一番上のy位置です。
protected boolean touchEvent(TouchEvent message){
switch(message.getEvent()){
...
case TouchEvent.UP:
int index = this.getFieldAtLocation(message.getGlobalX(1), message.getGlobalY(1) - OFFSET);
if(index != -1){
Field field = getField(index);
field.getChangeListener().fieldChanged(field, 0);
}
break;
}
return true;
}
私はこれに簡単な解決策があると思いますか?何か不足していますか?
5.0 9550シミュレータでは再現できません:2つの水平フィールドマネージャー、それぞれにクリック消費ボタンフィールドがあります。正常に動作します。マネージャの空のスペースをクリックしても、FieldChangeListenerイベントは発生しません。現在使用しているバージョン/デバイス –
@Max torch OS6。私はそれが今考え出されたと思う。この投稿への回答は[http://stackoverflow.com/questions/5948222/blackberry-click-outside-field]の助けとなりました。私はちょっと答えを投稿するつもりです。私が上でやっていたことは、ちょっとした印だった。 –
私は同じ問題を抱えていました。 ここをクリックしてください[BlackBerry outside outside Field](http://stackoverflow.com/questions/5948222/blackberry-click-outside-field) – aeracode