- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试使用 Codename One 通过 Google map 地理编码 API 进行字段文本自动完成。我做GoogleReverseGeocoderService像here这样的类,我将“public GoogleReverseGeocoderService(双纬度,双经度)”更改为“public GoogleReverseGeocoderService(字符串地址)”。而且效果很好。
所以我像下面的代码一样重写 getSuggestionModel() 和 filter() ,我创建一个变量 DefaultListModel model1,其中包含“model1.addItem("Example");”因为我不知道为什么如果我不添加项目,添加的新列表不会显示。
我将addDataChangeListener添加到AutoCompleteTextField变量“lieu”中,在函数dataChanged中,我获取用户在字段中输入的文本并将其发送到谷歌地理编码搜索。我找到每个“formatted_address”并将其放入模型列表 model1 中,因此 AutoCompleteTextField 的列表发生了更改。
但我有 3 个问题:
1/如何设置 AutoCompleteTextField 中显示的项目的大小,因为如果添加一次 model1.addItem("Example"),我会显示 2 个项目;如果添加 2 个 model1.addItem("Example"),则会显示 4 行;,它会乘以 2,依此类推...
@Override
public ListModel<String> getSuggestionModel() {
model1.addItem("Example");
filter = new FilterProxyListModel<String>(model1);
return filter;
}
2/GoogleReverseGeocoderService 不接受用户输入的重音字符,例如“élé”,我必须粘贴“ele”才能得到结果。我如何对请求进行编码?
3/AutoCompleTextField 显示的列表有时不刷新,我必须用鼠标按下它。但也许是因为模拟器?
Louis I Ave, Marrero, LA 70072, USA St Louis, MO, USA Louisiana Blvd NE, Albuquerque, NM, USA W Louisiana Ave, Soperton, GA 30457, USA Louisiana Ave S, Minnesota, USA W Louisiana St, McKinney, TX 75069, USA S Louisiana St, Ida, LA 71044, USA N Louisiana St, Ida, LA 71044, USA Louis I Ave, Marrero, LA 70072, USA St Louis, MO, USA Louisiana Blvd NE, Albuquerque, NM, USA W Louisiana Ave, Soperton, GA 30457, USA Louisiana Ave S, Minnesota, USA W Louisiana St, McKinney, TX 75069, USA S Louisiana St, Ida, LA 71044, USA N Louisiana St, Ida, LA 71044, USA
这里是所有代码:
// Define in class
protected FilterProxyListModel<String> filter;
protected DefaultListModel model1 = new DefaultListModel();
[ .... ]
//Code for google autocomplete
String locationText = "";
final AutoCompleteTextField lieu = new AutoCompleteTextField(){
private FilterProxyListModel<String> filter;
@Override
public ListModel<String> getSuggestionModel() {
model1.addItem("Example");
model1.addItem("Example");
model1.addItem("Example");
model1.addItem("Example");
model1.addItem("Example");
model1.addItem("Example");
model1.addItem("Example");
filter = new FilterProxyListModel<String>(model1);
return filter;
}
@Override
protected boolean filter(String text) {
if(filter != null) {
filter.filter(text);
return true;
}
return false;
}
};
lieu.setHint("Add address ...");
lieu.addDataChangeListener(new DataChangedListener() {
public void dataChanged(int type, int index) {
try {
Location l = Display.getInstance().getLocationManager().getCurrentLocation();
ConnectionRequest request = new GoogleReverseGeocoderService("" + lieu.getText()) {
@Override
protected void readResponse(InputStream input) throws IOException {
Result result = Result.fromContent(input, Result.JSON);
array = result.getAsStringArray("//formatted_address");
model1.removeAll(); // Remove all elements in list, before insert news
for (int i = 0; i < array.length; i++) {
System.out.println(""+array[i]);
model1.addItem(array[i]);
}
}
};
NetworkManager.getInstance().addToQueue(request);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
addComponent(lieu);
希望我清楚,有人有想法吗?
谢谢你,再见
最佳答案
上面的代码使用数据更改监听器来执行过滤,但它不应该这样做,因为过滤器调整模型大小为时已晚。
您应该在 filter
方法本身中执行此操作,因为这是应该进行过滤的位置,并且列表对话框的大小也将在此处放大。当您手动修改模型时,整个列表的大小不会调整。
为了使编码正常工作,您应该使用接受具有正确编码(可能是 UTF-8)的 Reader 的结果版本,以使其正常工作。
关于java - 代号一 : AutoCompleteTextField refresh list on textfield text change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34338618/
我使用这个包来拥有一个带有此代码的自动完成文本字段 AutoCompleteTextField( key: key,
只要 textField 中有一些文本,我希望箭头图标出现,否则它应该消失。如果我使用 TextField 而不是 AutoCompleteTextField,它工作正常。另外,如果我删除 suffi
我正在使用此自动完成 flutter 包。 https://pub.dev/packages/autocomplete_textfield 编辑说明: 我正在为将使用蓝牙键盘的Android平板电脑设
我遇到了一个问题,我有一个autocompletetextfield可以正常工作,但是当我settext throw controller什么都没发生时,contoller无法正常工作,其他工作正常(
看起来自动完成文本字段的模型对象是一个字符串,即使它应该是一个员工,导致无法从字符串转换为员工的异常。为什么?如何解决? final DefaultCssAutocompleteTex
我需要构建一个类似 AutoCompleteTextField 的组件,用户可以将某些选项标记为 Collection 夹(当他开始写作时,会显示一些选项,每个选项都有一个复选框将其标记为 Colle
这个问题是这样的:handling to onchange event of AutoCompleteTextField in wicket 我正在尝试使用带有自定义类的 AutoCompleteTe
我尝试使用 Codename One 通过 Google map 地理编码 API 进行字段文本自动完成。我做GoogleReverseGeocoderService像here这样的类,我将“publ
我正在使用 Java 和 Wicket 为网络应用程序编写一个自动完成组件。 当用户选择自动完成列表的一个选项时,有没有办法处理 onchange 事件来运行一些代码?我尝试在 AutoComplet
我是一名优秀的程序员,十分优秀!