Hiho,
um Einträge in einer ListView zu filtern nutze ich den Textwatcher bei einem Simpleadapter.
Das funktioniert alles soweit gut - wenn ich nach "abc" suche, gibt er mir die Ergebnisse aus, die mit "abc" beginnen.
Meine Frage wäre, ob es eine Möglichkeit gibt, auch Ergebnisse anzeigen zu lassen, wo das "abc" innerhalb des Wortes steht.
Der Code:
Code
adapter = new SimpleAdapter(
BanListActivity.this, banList, R.layout.list_item,
new String[]{TAG_BAN, TAG_REASON, TAG_TIME_FROM, TAG_TIME_TO, TAG_UUID},
new int[]{R.id.ban, R.id.reason, R.id.time_from, R.id.time_to, R.id.uuid});
setListAdapter(adapter);
inputSearch = (EditText) findViewById(R.id.inputSearch);
ListView listView = (ListView) findViewById(android.R.id.list);
listView.setAdapter(adapter);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
if (cs.length()>0 && cs.subSequence(cs.length()-1, cs.length()).toString().equalsIgnoreCase("\n")){
//Enter-Taste
InputMethodManager inputM = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputM.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0);
}else{
//((SimpleAdapter)BanListActivity.this.adapter).getFilter().filter(cs);
String text = inputSearch.getText().toString().toLowerCase(Locale.getDefault());
((SimpleAdapter) adapter).getFilter().filter(text);
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
}
}
Alles anzeigen