Android 在自动完成文本视图的建议列表中找不到项目时显示消息

Android 在自动完成文本视图的建议列表中找不到项目时显示消息,android,Android,当没有项目与AutocompleteTextView的建议列表匹配时,我需要一条消息。如果我使用AddContextChangeListener,那么它会在用户键入字符时始终显示消息,但我只在未找到匹配项时才需要它。所以请告诉我怎么做,这个列表来自web服务。谢谢你 searchEdit = (AutoCompleteTextView)findViewById(R.id.searchEdit); searchEdit.setCursorVisible(false); ArrayA

当没有项目与AutocompleteTextView的建议列表匹配时,我需要一条消息。如果我使用AddContextChangeListener,那么它会在用户键入字符时始终显示消息,但我只在未找到匹配项时才需要它。所以请告诉我怎么做,这个列表来自web服务。谢谢你

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();
}