6
私のListview
には、テキストと画像があり、ArrayList
に格納されています。BaseAdapter Listview Androidのフィルタリング
私はBaseAdapter
を使用してリストを表示しています。
EditText
に入力されたテキストに基づいてリストにfilter
を使用したいですが、機能しません。
私のコードは次のとおりです。ADVはのEditText
adv.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
viewadapter.getFilter().filter(s);
}
@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
}
});
ですそして、私のBaseAdapter
はFilterable
を実装ようでgetFilter
方法は次のとおりです。
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
if (mFilter == null) {
mFilter = new ArrayFilter();
}
return mFilter;
}
と私ArrayFilter
は次のとおりです。で
private class ArrayFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence prefix) {
FilterResults results = new FilterResults();
if (mNames == null) {
synchronized (mLock) {
mNames = new ArrayList<String>(mObjects);
}
}
if (prefix == null || prefix.length() == 0) {
synchronized (mLock) {
ArrayList<String> list = new ArrayList<String>(mNames);
results.values = list;
results.count = list.size();
}
} else {
String prefixString = prefix.toString().toLowerCase();
final ArrayList<String> values = mNames;
final int count = values.size();
final ArrayList<String> newValues = new ArrayList<String>(count);
for (int i = 0; i < count; i++) {
final String 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;
}
}
}
}
results.values = newValues;
results.count = newValues.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
//noinspection unchecked
mObjects = (List<String>) results.values;
if (results.count > 0) {
viewadapter.notifyDataSetChanged();
} else {
viewadapter.notifyDataSetInvalidated();
}
}
}
そのmNames
は、ListView
をフィルタリングするArrayList
です。
setTextFilterEnabled(true).
も有効ですが、フィルタリングは機能しません。
このアプローチは正しいですか?何が間違っている?そうでない場合、それを行う方法?
あなたはこの問題を解決しましたか?フィードバックをお願いしますか? –
いいえ、私は解決しませんでした、それは私がそれを開いたままに!もしあなたが持っていれば、ここに投稿してくださいThanx – Udaykiran
ArrayListにテキストと画像を保存した方法 ??? –