Android:addTextChangedListener运行不正常

时间:2011-11-03 12:49:50

标签: android android-edittext

我想对用户在EditText内输入做出反应,所以我使用了addTextChangedListener方法。 当用户键入单个字符时,onTextChanged的代码正在运行,一切正常。 因此,如果用户输入“a”,则onTextChanged将开始运行

但是如果用户输入另一个字符,例如b,则不会调用onTextChanged。

(EditText中的文字现在应为“ab”)

代码:

  et = (EditText)findViewById(R.id.edittextsearch);
  et.addTextChangedListener(new TextWatcher() 
  {

      public void afterTextChanged(Editable s){}
      public void beforeTextChanged(CharSequence s, int start, int count,int after){}
      public void onTextChanged(CharSequence s, int start, int before,int count)
      {
          int i = 0;
          textlength=et.getText().length();
          arr_sort.clear();
          for(i=0;i<3;i++)
          {
              if(textlength<=your_array_contents[i].length())
              {
                  if(et.getText().toString().equalsIgnoreCase((String) your_array_contents[i].subSequence(0, textlength)))
                  {
                      arr_sort.add(your_array_contents[i]); 
                  }
              }
          }
          lv.setAdapter(new ArrayAdapter<String>(GroupsActivity.this,
                    android.R.layout.simple_list_item_multiple_choice, arr_sort)); 
      }

  });

非常感谢帮助!

2 个答案:

答案 0 :(得分:5)

从您的代码中,我可以理解的是,您想要过滤ListView

您应该使用listView.setFilterText(String)

,而不是自行过滤

像这样:

首先添加你的适配器。

lv.setAdapter(new ArrayAdapter<String>(GroupsActivity.this,
                    android.R.layout.simple_list_item_multiple_choice, your_array_contents));

然后添加TextWatcher:

txtFilter.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {
        if(s.length()==0){
            lv.clearTextFilter();
        }
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){
    }
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
        lv.setTextFilterEnabled(true);
        lv.setFilterText(s.toString());
    }
});

答案 1 :(得分:0)

试试这种方式

inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text

            MainActivity.this.adapter.getFilter().filter(cs.toString());
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    });