2012-07-10 26 views
0

我有一個LabelField whith的風格FOCUSABLE和許多可調焦的Field s之後,我忽略navigationMovement方法LabelField

問題是:代碼永遠不會輸入navigationMovement的新實現中,但重點通常從LabelField移至下一個Field,而不通過navigationMovement實現!

PS,我也使用調試器來測試,以確保它永遠不會進入它的實現。

爲什麼會發生這種情況,以及如何捕獲FOCUSABLE LabelField的navigationMovement事件?爲什麼navigationMovement for FOCUSABLE LabeField在Blackberry中被繞過?

CODE:
這裏的類:

public abstract class FocusableLabelField extends LabelField { 
public boolean isDownUnfocused = false; 

public FocusableLabelField(String text) { 
    super(text, FOCUSABLE); 
} 

protected void drawFocus(Graphics graphics, boolean on) { 
     // DO NOTHING, FOCUS IS HANDLED IN PAINT 
} 

protected void paint(Graphics graphics) { 
    if(isDownUnfocused == true) 
     graphics.setColor(0xFFFFFF); 
    else { 
     if(isFocus()) 
      graphics.setColor(0xFFFFFF); 
     else { 
      graphics.setColor(0x777777); 
     } 
    } 
    super.paint(graphics); 
} 

protected void onFocus(int direction) { 
    isDownUnfocused = false; 
    onFocusing(); 
    super.onFocus(direction); 
} 

public abstract void onFocusing(); 

public void redraw() { 
    invalidate(); 
} 

protected boolean navigationMovement(int dx, int dy, int status, int time) { 
    //TODO CHECK WHY IT'S NOT ENTERING HERE ! 
    if(dy>0) 
     isDownUnfocused = true; 
    invalidate(); // IF REMOVED NO EFFECT WILL BE APPLIED 
    return super.navigationMovement(dx, dy, status, time); 
} 
} 

這裏就是我如何使用它的屏幕:

FocusableLabelField field = new FocusableLabelField("title") { 
    public void onFocusing() { 
     // some logic in the screen is done here ... 
    } 
} ; 
+1

你可以發佈你的LabelField子類嗎?至少你正在使用的'navigationMovement()'方法? – Nate 2012-07-10 21:16:56

+0

現在更新了代碼。 – 2012-07-11 09:28:55

+0

這不是你的實際代碼嗎?該代碼甚至沒有編譯。你甚至不給它一個類型(例如'boolean')就聲明'isDownUnfocused',然後用相同的簽名實現兩個方法...'protected void paint(Graphics);'。這不是合法的Java。請發佈您實際使用的代碼,否則很難提供幫助。謝謝。 – Nate 2012-07-11 22:44:39

回答

0

我只是跑你確切代碼在應用程序在5.0 8900模擬器和7.1 9900模擬器上,並且我做了看到你的navigationMovement()叫。但是,我不是100%肯定它在你想要的時候被調用。

我並不確切知道你想要做什麼,但看着上面的代碼,它看起來像你只是試圖爲焦點顏色添加自定義繪圖。是對的嗎?

如果是這樣,我不知道爲什麼你甚至需要重寫navigationMovement()。爲什麼不使用這樣的代碼:

public abstract class FocusableLabelField extends LabelField { 

    public FocusableLabelField(String text) { 
     super(text, FOCUSABLE); 
    } 

    protected void drawFocus(Graphics graphics, boolean on) { 
     // DO NOTHING, FOCUS IS HANDLED IN PAINT 
    } 

    protected void paint(Graphics graphics) { 
     int oldColor = graphics.getColor(); 
     if(isFocus()) 
     graphics.setColor(0xFFFFFF); 
     else { 
     graphics.setColor(0x777777); 
     } 
     super.paint(graphics); 
     graphics.setColor(oldColor); 
    } 

    protected void onFocus(int direction) { 
     onFocusing(); 
     invalidate(); 
     super.onFocus(direction); 
    } 

    protected void onUnfocus() { 
     invalidate(); 
     super.onUnfocus(); 
    } 

    public abstract void onFocusing(); 
} 
+0

因爲如果焦點向下移動,我想讓標籤保持白色。簡單地說,我有horizo​​ntalFieldManager,我想使用OS5來模仿paneview行爲,所以自定義標籤是paneview的標題,如果導航向下移動,這意味着這個Horizo​​ntalFieldManager下的屏幕中的項目與我來自的標籤有關,這就是爲什麼我希望標籤即使在失去焦點的情況下也能保持白色(即使在導航移動失敗的情況下也會失去焦點) – 2012-07-12 15:34:30

+0

我使用isDownUnfocused來檢測HFM中的哪個項目是活動的paneview標題,並且應該用白色的vene如果它現在不關注 – 2012-07-12 15:36:53

+0

@AshrafBashir,好的,謝謝澄清。如果其他人看到這個問題仍然沒有解決,並且沒有閱讀所有這些評論,請看看你的問題。我想我明白你在做什麼,並且我會建議採用另一種方式,而不是通過navigationMovement()。但是,我需要看到一些使用這個類的代碼。例如,創建此「FocusableLabelField」的管理器並添加它下面的字段。你能證明嗎?你有多個「窗格」,還是隻有一個? – Nate 2012-07-15 00:33:01