Android 在自动完成文本视图的建议列表中找不到项目时显示消息
当没有项目与AutocompleteTextView的建议列表匹配时,我需要一条消息。如果我使用AddContextChangeListener,那么它会在用户键入字符时始终显示消息,但我只在未找到匹配项时才需要它。所以请告诉我怎么做,这个列表来自web服务。谢谢你Android 在自动完成文本视图的建议列表中找不到项目时显示消息,android,Android,当没有项目与AutocompleteTextView的建议列表匹配时,我需要一条消息。如果我使用AddContextChangeListener,那么它会在用户键入字符时始终显示消息,但我只在未找到匹配项时才需要它。所以请告诉我怎么做,这个列表来自web服务。谢谢你 searchEdit = (AutoCompleteTextView)findViewById(R.id.searchEdit); searchEdit.setCursorVisible(false); ArrayA
searchEdit = (AutoCompleteTextView)findViewById(R.id.searchEdit);
searchEdit.setCursorVisible(false);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, menuItems);
searchEdit.setAdapter(adapter);
searchEdit.addTextChangedListener(this);
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!searchEdit.isPerformingCompletion()) {
Toast.makeText(getApplicationContext(), "No Item Found", 2000).show();
return;
}
}
searchEdit=(AutoCompleteTextView)findViewById(R.id.searchEdit);
searchEdit.setCursorVisible(false);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u下拉列表\u item\u 1line,菜单项);
searchEdit.setAdapter(适配器);
searchEdit.addTextChangedListener(此);
@凌驾
public void PostTextChanged(可编辑arg0){
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
如果(!searchEdit.isPerformingCompletion()){
Toast.makeText(getApplicationContext(),“找不到项”,2000).show();
返回;
}
}
尝试以下操作:将toast放入后TextChanged()函数中
searchEdit=(AutoCompleteTextView)findViewById(R.id.searchEdit);
searchEdit.setCursorVisible(false);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u下拉列表\u item\u 1line,菜单项);
searchEdit.setAdapter(适配器);
searchEdit.addTextChangedListener(此);
@凌驾
public void PostTextChanged(可编辑arg0){
如果(!searchEdit.isPerformingCompletion()){
Toast.makeText(getApplicationContext(),“找不到项”,2000).show();
返回;
}
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
}
autosearch.setOnFocusChangeListener(新的OnFocusChangeListener(){
也许我的答案晚了,但我已经这样解决了问题:
searchEdit.addTextChangedListener(watcher);
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 2) {
if (!searchEdit.isPopupShowing()) {
Toast.makeText(getApplicationContext(),"No results", Toast.LENGTH_SHORT).show();
return;
}
}
}
};
只是碰到了同样的问题。祝酒词是蹩脚的,显示与建议相同的下拉适配器要酷得多,但只有一个项目告诉你“没有建议”或类似的东西。例如,谷歌地图应用程序就是这样工作的 在这个解决方案中有两个时刻。首先,如果您的手机上已经有了所有可用的项目,您只需要更改适配器筛选器。在我的例子中,每个用户输入的结果都是Http请求,它返回建议列表或空列表。下面是我的操作方法
List<AddressItem> cities = event.getCities();
if(cities.isEmpty()) {
AddressItem placeholder = AddressItem.placeholder(getContext());
cities.add(placeholder);
}
AddressItemAdapter addressItemAdapter = new AddressItemAdapter(getContext(), R.layout.simple_text_view, cities);
autoCompleteCity.setAdapter(addressItemAdapter);
autoCompleteCity.showDropDown();
progressCity.setVisibility(View.GONE);
要使其工作,适配器应该在该方法中放置正确的id
public long getItemId(int position) {
return mItems.get(position).getId();
}
占位符的id字段应等于无效的\u id。
我希望我的解释能让你获得比这些祝酒词更好的用户体验。你最初得到所有字符串?或者每次文本更改时?(在
onTextChange
中)Autocompletetextview有焦点,如果没有匹配项,我必须显示消息,但我在其他地方完成了它(在onTextChange()回调中执行示例搜索)编辑您的答案并解释。谢谢ZygD,请原谅我的英语不好;)这不是最好的答案,弹出窗口可能需要一段时间才能显示,您同时显示了一个错误和一个弹出窗口
List<AddressItem> cities = event.getCities();
if(cities.isEmpty()) {
AddressItem placeholder = AddressItem.placeholder(getContext());
cities.add(placeholder);
}
AddressItemAdapter addressItemAdapter = new AddressItemAdapter(getContext(), R.layout.simple_text_view, cities);
autoCompleteCity.setAdapter(addressItemAdapter);
autoCompleteCity.showDropDown();
progressCity.setVisibility(View.GONE);
@Override
public boolean isEnabled(int position) {
return items.get(position).getId == INVALID_ID;
}
public long getItemId(int position) {
return mItems.get(position).getId();
}