我在黑莓中使用了AutoCompleteField
,并使用BasicFilteredList
过滤文本。它在Blackberry SDK 5.0及更高版本中运行良好。但是,搜索按照输入的单词进行工作。如果我有一个文本字符串如下。黑莓中的AutoCompleteField文本过滤
ŧ115炫酷Galleria购物中心,CNR老科利尔和沃尔特斯道莫雷WA 1522
它可以过滤字符串只有当我输入152,但它不能过滤如果我使用522我想它应该按照我的要求过滤,因为它们出现在上述搜索字符串中。请帮我解决这个问题。 下面是预先创建AutoCompleteField
import net.rim.device.api.collection.util.BasicFilteredList;
import net.rim.device.api.collection.util.BasicFilteredListResult;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.AutoCompleteField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.text.TextFilter;
import net.rim.device.api.util.CharacterUtilities;
public class AutoCompleteFieldApp extends UiApplication {
public static void main(String[] args) {
AutoCompleteFieldApp app = new AutoCompleteFieldApp();
app.enterEventDispatcher();
}
AutoCompleteFieldApp() {
pushScreen(new HomeScreen());
}
}
class HomeScreen extends MainScreen {
LabelField selectedText;
public HomeScreen() {
setTitle("Autocomplete Text Field Demo");
selectedText = new LabelField();
BasicFilteredList filterList = new BasicFilteredList();
String[] address = { "T 115 Centro Galleria Shopping Centre, Cnr Old Collier and Walters Road Morley WA 1522",
"1423 SEAVIEW POINT POINT COOK VIC 2674",
"Lot 1498 Yarraman Road Wyndham Vale VIC 3795",
"Lot 3506 Witchmount Close Hillside VIC 4055",
"6 Paas Place Williamstown VIC 4233",
"Lot 99 14 James Close Sunbury VIC 4502",
"1 Charlotte Street Clayton South VIC 4779" };
filterList.addDataSet(1, address, "address", BasicFilteredList.COMPARISON_IGNORE_CASE);
AutoCompleteField autoCompleteField = new AutoCompleteField(filterList){
public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) {
ListField _list = getListField();
if (_list.getSelectedIndex() > -1) {
if(selectedText!=null){
BasicFilteredListResult result = (BasicFilteredListResult) selection;
selectedText.setText(result._object.toString());
}
}
}
};
add(autoCompleteField);
AutoCompleteField autoCompleteField2 = new AutoCompleteField(filterList){
public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) {
ListField _list = getListField();
if (_list.getSelectedIndex() > -1) {
if(selectedText!=null){
BasicFilteredListResult result = (BasicFilteredListResult) selection;
selectedText.setText(result._object.toString());
}
}
}
};
TextFilter filter = new TextFilter() {
public char convert(char c, int status) {
if (!validate(c))
return 0;
return c;
}
public boolean validate(char c) {
return CharacterUtilities.isDigit(c);
}
};
autoCompleteField2.getEditField().setFilter(filter);
add(autoCompleteField2);
add(selectedText);
}
}
由于该代码示例。
由于我的搜索字符串是巨大的,超过4000+句子..所以这种方法不会工作这种情况。 – 2012-04-19 12:34:29