2011-11-30 47 views
0

我已经添加到MainScreen和类实现FieldChangeListener。问题在于,当我输入文本并按下按键时,它会处理,但当我删除文本时,按下该按键则不会。下面是我添加了它:BB AutoCompleteField事件没有被处理

/// search bar 
    BasicFilteredList filterList = new BasicFilteredList(); 
    String[] terms = {"a","b","c","d","e","f","g","h"}; 
    filterList.addDataSet(1,terms,"search",BasicFilteredList.COMPARISON_IGNORE_CASE); 
    autoCompleteField = new AutoCompleteField(filterList){ 
     public void onSelect(Object selection, int type) { 
      if(type == SELECT_ENTER || type == SELECT_TRACKBALL_CLICK || type == SELECT_TRACKWHEEL_CLICK) 
       setListView(); 
     } 
    }; 
//----------------over-ridden method----------------- 
public void fieldChanged(Field field, int context) { 
    if(field == topBar.getField(0)){ 
    // do something 
    } 
    else if(field == topBar.getField(1)){ 
    // do something 
    } 
    else if(field == topBar.getField(2)){ 
    //do something  
    } 
    else if(field == autoCompleteField){ 
     setListView();//debugger never reaches here! 
    } 
} 

编辑最终的解决方案是为以下各项

autoCompleteField = new AutoCompleteField(filterList){ 
     public void fieldChanged(Field field, int context) { 
      setListView(); 
     } 
    }; 
+0

我想你忘了添加autoCompleteField.setChangeListener(this); –

+0

nope ...而是我删除它,因为@Arhimed指出,“AutoCompleteField”已经听取了它自己。 – tipycalFlow

回答

1

那么简单,据我了解,你想你的问题得到通知时,磁场就空。如果这是你需要的,你可以把注意力放在AutoCompleteField.fieldChanged(Field field, int context)上。它是Executed whenever the text in the field changes。因此,您可以覆盖它并检查文本是否为空字符串,然后触发您的自定义操作。

顺便说一句,在这种情况下,我认为你不应该称之为:

autoCompleteField.setChangeListener(this); 

因为AutoCompleteField工具FieldChangeListener而且它已经在AutoCompleteField.fieldChanged(Field field, int context)侦听本身。

+0

我删除了'autoCompleteField.setChangeListener(this);' - 你是对的!我有其他的领域实现'FieldChangeListener',所以我一直听着它与其他按钮在重叠字段(字段字段,int上下文)'方法,但奇怪的是它没有工作!我在问题 – tipycalFlow

+0

@tipycalFlow中添加了这个:从你的评论我仍然怀疑你是否修复它。 :) –

+0

是的,我没有:( – tipycalFlow