首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoCompleteTextView建议

AutoCompleteTextView建议
EN

Stack Overflow用户
提问于 2014-02-11 06:50:57
回答 4查看 564关注 0票数 0

我正在使用autocompleteTextview尝试从服务器获取一些数据。

代码语言:javascript
复制
private void initAutoCompleteTextViews() {
        mAutoCompleteList = new ArrayList<String>();

        mStreet.setThreshold(3);

        mStreet.addTextChangedListener(new TextWatcher() {

            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() > 3){
                    getSuggestion();
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
    }

我的问题是,当我选择一个建议时,getSuggestion()再次调用,因为lengh也大于3。

有什么解决方案,我可以选择建议,并将其设置在autocompleteTextview上吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-11 07:14:28

我觉得它能帮到你

代码语言:javascript
复制
private AutoCompleteTextView mSearchbar;
private ArrayAdapter<String> mAutoCompleteAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    mAutoCompleteAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line);
    mSearchbar = (AutoCompleteTextView) findViewById(R.id.searchbar);
    mSearchbar.setThreshold(3);
    mSearchbar.setAdapter(mAutoCompleteAdapter);
    mSearchbar.addTextChangedListener(new TextWatcher() {

        private boolean shouldAutoComplete = true;

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            shouldAutoComplete = true;
            for (int position = 0; position < mAutoCompleteAdapter.getCount(); position++) {
                if (mAutoCompleteAdapter.getItem(position).equalsIgnoreCase(s.toString())) {
                    shouldAutoComplete = false;
                    break;
                }
            }

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            if (shouldAutoComplete) {
                new DoAutoCompleteSearch().execute(s.toString());
            }
        }
    }
}

private class DoAutoCompleteSearch extends AsyncTask<String, Void, ArrayList<String>> {
    @Override
    protected ArrayList<String> doInBackground(String... params) {
        ArrayList<String> autoComplete = new ArrayList<String>();
        //do autocomplete search and stuff.
        return autoComplete;
    }

    @Override
    protected void onPostExecute(ArrayList<String> result) {
        mAutoCompleteAdapter.clear();
        for (String s : result)
            mAutoCompleteAdapter.add(s);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-02-11 06:57:09

实施

代码语言:javascript
复制
mStreet.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int pos,
            long id) {
          Toast.makeText(mContext,"new item selected.", Toast.LENGTH_LONG).show();

   // your code when item is selected from suggestion
    }
});

而不是实现addTextChangedListene(new TextWatcher)

票数 0
EN

Stack Overflow用户

发布于 2014-02-11 07:08:22

在add textChanged侦听器中,在if循环中添加如下额外条件

代码语言:javascript
复制
@Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() > 3 && mStreet.getText().length() != ResultString.length()){
                    getSuggestion();
                }

在ur getSuggestion()方法中使用如下字符串,

代码语言:javascript
复制
public void getSuggestion(){

.......
......

ResultString = (Your Server Response);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21695057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档