2011-12-06 40 views
2

我有一個帶有選項卡的主屏幕。每個標籤都有自己的覆蓋navigationClick方法,看起來像這樣列表中的選項卡黑莓

protected boolean navigationClick(int status, int time) { 
    fieldChangeNotify(1); 
    return true; 
} 

等方法

public boolean isFocusable() { 
    return true; 
} 

protected void drawFocus(Graphics graphics, 
         boolean on) { 
    // Don't draw the default focus 
} 

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

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

然而,在我mainscreen,有一個horizo​​ntalfieldmanager這些選項卡3。重寫fieldChanged是這樣實現的

public void fieldChanged(Field field, int context) { 
    if (_tabArea != null) { 
     if (field == _tab1) { 
      delete(_tabArea); 
      _tabArea = displayTab1(); 
      add(_tabArea); 

     } else if (field == _tab2) { 
      delete(_tabArea); 
      _tabArea = displayTab2(); 
      add(_tabArea); 
     } else if (field == _tab3) { 
      delete(_tabArea); 
      _tabArea = displayTab3(); 
      add(_tabArea); 
     } 
    } 
} 

其中切換選項卡。我有一個navigationClick下面的處理列表字段上的點擊,但是,因爲我已經覆蓋導航clickClick,該標籤切換不再起作用。任何人有任何想法爲什麼?

protected boolean navigationClick(int status, int time) { 
     Field field = _listfield; 

     if(field instanceof ListField) 
     { 
      int selected = _listfield.getSelectedIndex(); 
      switch (selected) { 
      case 0: 
       delete(_tabArea); 
       All all = new All(); 
       _tabArea = all.getVFM(); 
       add(_tabArea); 
       break; 
      case 1: 
       break; 
      } 
      return true; 
     } 
     return super.navigationClick(status, time); 
} 

回答

1

在所有情況下,您的覆蓋是否調用super.navigationClick()?

根據您的導航代碼clickClick,它看起來像super.navigationClick()不會被調用,因爲if(field instanceof ListField)阻止執行超級呼叫。

+0

是的,它看起來像這個http://justpaste.it/mc4 – mikez

+0

我改變了字段字段= _listfield;字段field = this.getFieldWithFocus(); ...現在的標籤工作,但選擇列表項不起作用 – mikez

+0

我認爲,而不是使用this.getFieldWithFocus()。做一些像if(field.isFocus()){//你的代碼//} 它可能是塞滿了,因爲它是在你關注其他領域時觸發的。 –