2012-03-31 8 views
0

こんにちは、自分の画面にカスタムレイアウトを生成しました。フォーカスしているときに水平フィールドマネージャの色やイメージを変更し、選択した水平フィールドマネージャのクリックイベントを実行します。 詳細については、スクリーンショットを参照してください。BlackberryでカスタムHorizo​​ntal Field ManagerとClickイベントでフォーカスを設定する方法は?

これは私がしようとしていた私のコード..です

HorizontalFieldManager hfmrow=new HorizontalFieldManager(USE_ALL_WIDTH|HorizontalFieldManager.FOCUSABLE | Field.FOCUSABLE) 
          { 
            public void onFocus(int direction) 
             { 
              isFocus = true; 
              super.onFocus(direction); 
              invalidate(); 

             } 
            public void onUnfocus() 
            { 
             invalidate(); 
             isFocus = false; 
             super.onUnfocus(); 



            } 
            public void paint(Graphics g) 
            { 
             if(isFocus) 
             { 
              hfmrow.setBackground(BackgroundFactory.createSolidBackground(Color.RED)); 
              invalidate();                      
              super.paint(g); 

             } 
             else 
             { 
              hfmrow.setBackground(BackgroundFactory.createSolidBackground(Color.GREEN));           
              invalidate();           
              super.paint(g); 
             } 
            } 

           protected boolean navigationClick(int status, int time) 
           { 
            Dialog.alert("You are in hfm"+id); 
            return true; 
           } 

          };       


          hfmrow.setMargin(0, 10, 0, 10); 
          hfmrow.add(new NullField(Field.FOCUSABLE)); 

すべてのヘルプは、フォーカスを維持するために... ありがとう事前に

enter image description here

答えて

2

あなたはHFM

import net.rim.device.api.system.Display; 
import net.rim.device.api.ui.Color; 
import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.FieldChangeListener; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.Manager; 
import net.rim.device.api.ui.TouchEvent; 
import net.rim.device.api.ui.Touchscreen; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.Dialog; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.NullField; 
import net.rim.device.api.ui.container.HorizontalFieldManager; 
import net.rim.device.api.ui.container.MainScreen; 

public class sample extends MainScreen implements FieldChangeListener{ 

HorizontalFieldManager logInDetailManager=null; 
int background_color=0; 

public sample() { 

    logInDetailManager = new HorizontalFieldManager(Manager.USE_ALL_WIDTH|Field.FOCUSABLE){ 
     protected void sublayout(int maxWidth, int maxHeight) { 
       int height=40; 
      super.sublayout(Display.getWidth(), height); 
      setExtent(Display.getWidth(), height); 
     } 
     protected void paint(Graphics graphics) { 

      graphics.setBackgroundColor(background_color); 
      graphics.clear(); 
      invalidate(); 
      super.paint(graphics); 
     } 
     protected void onFocus(int direction) { 
      super.onFocus(direction); 
      background_color=Color.RED; 
      invalidate(); 
     } 
     protected void onUnfocus() { 
      invalidate(); 
      background_color=Color.GREEN; 

     } 
     protected boolean navigationClick(int status, int time) { 

      if(Touchscreen.isSupported()){ 
       return false; 
      }else{ 
       fieldChangeNotify(1); 
       return true; 
      } 

     } 
     protected boolean touchEvent(TouchEvent message) 
     { 
      if (TouchEvent.CLICK == message.getEvent()) 
      { 
       FieldChangeListener listener = getChangeListener(); 
       if (null != listener) 
        this.setFocus(); 
        listener.fieldChanged(this, 1); 
      } 
      return super.touchEvent(message); 
     } 
    }; 
    logInDetailManager.setChangeListener(this); 
    logInDetailManager.add(new LabelField("hello")); 
    logInDetailManager.add(new NullField(Field.FOCUSABLE)); 
    add(logInDetailManager); 
    add(new LabelField("good",Field.FOCUSABLE));  
} 

public void fieldChanged(Field field, int context) {    
    if(field==logInDetailManager){     
     UiApplication.getUiApplication().invokeLater(new Runnable() {       
      public void run() {         
       Dialog.inform("Hi how are you?");       
      }      
     });   
    } 
} 

} 
を選択しているときの色を変更するためのものです
1

使用onFocus()onUnfocusに感謝ですHorizontalFieldManagernavigationClick()を使用してhfmをクリックしてください。あなたがにField.FOCUSABLEを設定することを確認してください。

booleanを1つ取り、フォーカス状態を確認し、塗装方法でコードを実行します。コードの下にチェック..

`

boolean _isFocus = false; 
     HorizontalFieldManager hfm = new HorizontalFieldManager(HorizontalFieldManager.FOCUSABLE | Field.FOCUSABLE) 
      { 
      public void onFocus(int direction) 
       { 
       _isFocus = true; 
        super.onFocus(direction); 
       } 
      public void onUnfocus() 
      { 

    _isFocus = false; 
      super.onUnfocus(); 

     } 
public void paint(Graphics g) 
       { 
        if(_isFocus) 
        { 
         // replace your bitmap image or bgcolor here 
              hfm.invalidate(); 
         super.paint(g); 
        } 
       else 
       { 
        // replace your bitmap image or bgcolor here 
              hfm.invalidate(); 
        super.paint(g); 
       } 
      } 

     protected boolean navigationClick(int status, int time) 
     { 
      Dialog.alert("You are in hfm"); 
      return true; 
     } 
    }` 

は、それが動作願っています!あなたは、このコードにそれを行うことができますどのようにここで

関連する問題