4

当没有项目匹配 AutocompleteTextView 的建议列表时,我想要一条消息。如果我使用 addOnTextChangeListener,那么它会在用户输入字符时一直显示消息,但我只在没有找到匹配项时才想要它。所以请告诉我如何做到这一点,列表来自网络服务。感谢您。

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;
    }
}
4

4 回答 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;
            }
        }
    }
};
于 2015-04-06T19:12:13.383 回答
2

刚刚碰到同样的问题。祝酒词很烂,显示与建议相同的下拉适配器要酷得多,但只有一个项目告诉“没有建议”或类似的东西。例如,这就是谷歌地图应用程序的工作方式。

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

你的占位符应该有等于 INVALID_ID 的 id 字段。我希望我的解释能让您比这些 Toasts 更喜欢 UX。

于 2017-02-07T11:35:48.313 回答
0

试试这个:你把吐司放入 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) {

}
于 2013-02-02T11:35:18.370 回答
0

autosearch.setOnFocusChangeListener(新 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;
            }
        }
    });
于 2014-08-12T11:24:51.567 回答