当自动完成文本视图的建议列表中没有找到任何项目时,显示消息。

4
当AutocompleteTextView的建议列表中没有匹配项时,我希望得到一条消息。如果我使用addOnTextChangeListener,则会在用户键入字符时始终显示消息,但我只想在没有匹配项时才显示消息。请告诉我如何实现此功能,列表来自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;
    }
}

你最初获取所有字符串吗?还是每次文本更改时(在“onTextChanged”中)获取? - Archie.bpgc
4个回答

2
也许我的回答晚了,但我是这样解决问题的:
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;
            }
        }
    }
};

编辑您的答案,附上解释。 - gsamaras
谢谢ZygD,对不起我的英语不好 ;) - Antonio Sánchez Díaz
1
这不是最佳答案,弹出窗口可能需要一段时间才能出现,而且您会同时看到错误和弹出窗口。 - Maciej Beimcik

2

我遇到了同样的问题。Toast提示信息不够好,使用与建议下拉列表相同的适配器来显示只有一个项目告诉“没有建议”之类的信息更酷。例如,Google地图应用程序就是这样做的。

这个解决方案有两个要点。首先,如果您已经在手机上拥有所有项目,则只需要更改适配器过滤器。在我的情况下,每个用户输入都会导致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);

这里有一个静态方法placeholder()用于占位符项目。其次,该项目不应可点击。因此,您需要在适配器方法中检查它的id...

@Override
public boolean isEnabled(int position) {
    return items.get(position).getId == INVALID_ID;
}

为了使其正常工作,您的适配器应该在此方法中放置适当的 ID。
public long getItemId(int position) {
    return mItems.get(position).getId();
}

你的占位符应该有一个id字段等于INVALID_ID。 我希望我的解释能够带给你比这些Toast更好的用户体验。


0
尝试这样做:将toast放入afterTextChanged()函数中。
  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) {
  if (!searchEdit.isPerformingCompletion()) {
    Toast.makeText(getApplicationContext(), "No Item Found", 2000).show();
    return;
}
}
 @Override
 public void beforeTextChanged(CharSequence s, int start, int count,
    int after) {

 }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

Autocompletetextview获得焦点,如果没有匹配项,则必须显示消息,但我在其他地方完成了它(在onTextChange()回调中执行了详尽的搜索)。 - HungryHeart

0

autosearch.setOnFocusChangeListener(new OnFocusChangeListener() {

自动搜索.setOn焦点变更监听器(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                autosearch.getLayoutParams().width = JNConstants.WIDTH_35;
                rel_layer.setVisibility(View.VISIBLE);
            } else {

                if(!autosearch.isPerformingCompletion()){
                    if( jnApp.getSearch_result().size()==0)
                            {
                        Log.v("mytag", "search_results_none");

                        Toast t = Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.search_results_none), Toast.LENGTH_SHORT);
                        t.setGravity(Gravity.CENTER, 0, 0);
                        t.show();
                        return;

                    }
                    }

                autosearch.getLayoutParams().width = JNConstants.WIDTH_15;
            }
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接