私はこれに頭をぶつけて2日間オンとオフを繰り返しています。
getfilter.filter()を使おうとしましたが、うまくいきませんでした。そこで、リストを検索するためにこのコードを作成しました。動作しますが、いくつかの文字を削除すると、リストが最後の結果でスタックし、更新されません。
例:リスト:こんにちは、こんにちは、ハン、ソロ
「h」と入力すると、hello、hi、hanが表示されます。
'e'を追加すると、その'he'のみが表示されます
eを削除しても、hanとhiは再び表示されません。
private TextWatcher filterTextWatcher = new TextWatcher() {
final ArrayList<String> finalItems = mItems;
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
ArrayList<String> searchedItems = retainsSearched(mItems, s.toString());
adapter.clear();
for (int i = 0; i < searchedItems.size(); i++) {
adapter.add(searchedItems.get(i));
}
adapter.notifyDataSetChanged();
}
};
public ArrayList<String> retainsSearched(ArrayList<String> mItems2, String term) {
ArrayList<String> stations = new ArrayList<String>();
for (int i = 0; i < mItems2.size(); i++) {
if (mItems2.get(i).toLowerCase().startsWith(term.toLowerCase())) {
stations.add(mItems2.get(i));
}
}
return stations;
}