2

嗨,我有一个编辑框,如果用户键入过滤应该在列表视图中自动完成...

从下面的代码一切正常,但如果我在字符中放置空格,则列表视图不会显示任何条目..

下面是我的代码

      adapter = new SimpleAdapter(PredefinedLocation.this, fillMaps, R.layout.list_item_deal, new String[] { "name" }, new int[] { R.id.name });
    // Adding data into listview
    lv.setAdapter(adapter);
    edtSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            lv.setTextFilterEnabled(true);
            lv.setFilterText(s.toString().trim());
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            if(s.length()==0){
                lv.clearTextFilter();
            }
        }
    });

就像我写“The”一样,结果将是“The Local”、“The Adams”

但是如果我写“The Local”,结果将是空白的......因为“The”和“Local”中有空格:(

4

1 回答 1

1

出现此问题是因为您使用的是SimpleAdpater,尝试使用ArrayAdapter它将解决您的问题。我不知道这是为什么!

看看这个

http://www.talkandroid.com/android-forums/android-development-answers-tutorials-code-snippets/2534-diferent-filter-behavior-simpleadapter-arrayadapter.html

尝试以这种方式放置您的代码,我已经测试过它可以完美运行

  adapter = new ArrayAdapter<String>(PredefinedLocation.this, R.layout.list_item_deal, R.id.name, fillMaps);

    lv.setAdapter(adapter);
    edtSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            lv.setTextFilterEnabled(true);
            lv.setFilterText(s.toString().trim());
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            PredefinedLocation.this.adapter.getFilter().filter(s.toString().trim());
            /*if(s.length()==0){
                lv.clearTextFilter();
            }*/
        }
    });
于 2012-11-06T08:45:10.317 回答