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