Android 过滤列表视图-不是我认为的工作方式/

Android 过滤列表视图-不是我认为的工作方式/,android,listview,filter,Android,Listview,Filter,我希望你能帮我解决一个问题。我有一个由编辑框过滤的列表视图。我想它会根据edittext中的文本过滤listview中文本的任何部分。因此,如果我在列表视图中有三个项目,“纸杯蛋糕”、“甜甜圈”、“Eclair”和“Froyo”,并且我键入“cl”,它将不会返回任何内容……但是如果我键入“ecl”,它将返回“Eclair”。对不起,如果我说得太过分了…这有点难以解释。这是我的密码: private EditText ed; private String lv_arr[]={"Cupcake","

我希望你能帮我解决一个问题。我有一个由编辑框过滤的列表视图。我想它会根据edittext中的文本过滤listview中文本的任何部分。因此,如果我在列表视图中有三个项目,“纸杯蛋糕”、“甜甜圈”、“Eclair”和“Froyo”,并且我键入“cl”,它将不会返回任何内容……但是如果我键入“ecl”,它将返回“Eclair”。对不起,如果我说得太过分了…这有点难以解释。这是我的密码:

private EditText ed;
private String lv_arr[]={"Cupcake","Donut","Eclair","Froyo"};
ArrayAdapter<String> arrad;

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.search);

     ed = (EditText) findViewById(R.id.edit);
     ListView list = (ListView) findViewById(R.id.listviewtest);
     arrad =  new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , lv_arr);
     list.setAdapter(arrad);
     list.setTextFilterEnabled(true);

     ed.addTextChangedListener(new TextWatcher() {
         @Override
         public void onTextChanged( CharSequence arg0, int arg1, int arg2, int arg3) {
             SearchByName.this.arrad.getFilter().filter(arg0);
         }

         @Override
         public void beforeTextChanged( CharSequence arg0, int arg1, int arg2, int arg3) {

        }

        @Override
        public void afterTextChanged( Editable arg0) {

        }
   });
}
私人编辑文本;
私有字符串lv_arr[]={“纸杯蛋糕”、“甜甜圈”、“Eclair”、“Froyo”};
ArrayAdapter arrad;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
ed=(EditText)findViewById(R.id.edit);
ListView列表=(ListView)findViewById(R.id.listviewtest);
arrad=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,lv\u arr);
list.setAdapter(arrad);
list.setTextFilterEnabled(true);
ed.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、int arg3){
SearchByName.this.arrad.getFilter().filter(arg0);
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、int arg3){
}
@凌驾
public void PostTextChanged(可编辑arg0){
}
});
}

如果查看arrayadapter的源代码,它将只过滤列表项中任何给定单词的第一个字母(因此,给定一个“eclair甜甜圈”项,它将匹配“ecl”或“don”,但不匹配“air”或“nut”: 以下是ArrayAdapter.java中的相关代码

      for (int i = 0; i < count; i++) {
            final T value = values.get(i);
            final String valueText = value.toString().toLowerCase();

            // First match against the whole, non-splitted value
            if (valueText.startsWith(prefixString)) {
                newValues.add(value);
            } else {
                final String[] words = valueText.split(" ");
                final int wordCount = words.length;

                for (int k = 0; k < wordCount; k++) {
                    if (words[k].startsWith(prefixString)) {
                        newValues.add(value);
                        break;
                    }
                }
            }
        }
for(int i=0;i

如果你想在文字中间过滤你的模式的任何实例,你需要编写你自己的适配器。它实现可过滤的

谢谢。我会给你一个机会!