1

高度な UI の例でビットマップ ボタン フィールドを使用しています。デフォルトでは、5.0 jreでボタンを無効にする方法は機能していないため、ボタンの機能を無効にしてから無効にするための以下のコードを追加しましたが、setchangelistenerは機能していません。これが私の問題です..これが私が追加した私のコードですボタンを無効にするには..確認してください。インボークアクションメソッドで何か変更する必要がありますか?

 public boolean isDisable() {
   return isDisable;
 }

 public void setDisable(boolean isDisable) {
   this.isDisable = isDisable;
 invalidate();
 }

 public boolean isFocusable() {
   return isFocusable && !isDisable;
 }

 public void setFocusable(boolean isFocusable) {
 this.isFocusable = isFocusable;
 }

 protected boolean invokeAction(int action) {
   if (!isDisable){
    fieldChangeNotify(0);
   }

       return true;
 }

 public boolean setEnabled() {
   return false;
 }
4

1 に答える 1

1

これについての BlackBerry フォーラムでの議論を次に示します。

私が時々行ったことは、オブジェクトのisEditable()プロパティを実際に利用することです。これは、編集可能性Fieldと有効化が多少似た概念であるためです。isDisabled()本当に別のコードを保持したい場合は、それで問題ありません。以下で使用する場所を置き換えてisEditable()ください(ブール値を逆にすることを忘れないでください...これは、常に肯定的にプログラムする理由の1つです...のisEnabled()代わりにメソッドを作成してくださいisDisabled())。

したがって、上記のコードの代わりに、このコードをBitmapButtonField、または のいずれかに追加しBaseButtonFieldます。

public boolean isFocusable() {
   return isEditable() && super.isFocusable();
}

そしてこれでBitmapButtonField

protected void paint( Graphics g ) {
   int oldAlpha = g.getGlobalAlpha();
   int index = g.isDrawingStyleSet( Graphics.DRAWSTYLE_FOCUS ) ? FOCUS : NORMAL;
   if (!isEditable()) {
      g.setGlobalAlpha(100);  // alpha is 0 to 255, so this is 100/255
   }
   g.drawBitmap( 0, 0, _bitmaps[index].getWidth(), _bitmaps[index].getHeight(), _bitmaps[index], 0, 0 );
   g.setGlobalAlpha(oldAlpha);
}

次に、マネージャー クラスで次のように、変更リスナーをセットアップするか、ボタンを無効にします。

  BitmapButtonField btn = 
     new BitmapButtonField(Bitmap.getBitmapResource("button.png"),
                           Bitmap.getBitmapResource("button-lit.png"));

  btn.setChangeListener(new FieldChangeListener() {
     public void fieldChanged(Field field, int context) {
        Dialog.alert("Button clicked!");
     }         
  });
  btn.setEditable(false);   // this disables the button
  add(btn);

ただし、ボタンを無効にすると、変更リスナーが呼び出されないことを理解してください。それは、それが機能するはずの方法のようなものです。変更リスナーは、ボタンが有効でクリック可能な場合にのみ呼び出されます。

また、ボタンが無効になっているとき (編集不可)にボタンの外観を変えるためにpaint()、ボタンが無効になっているときに別のアルファ値を設定するようにオーバーライドします。あなたはそれについて言及していませんでしたので、それが気に入らなければ、それを取り除くことができます.

于 2012-07-15T01:16:12.943 に答える