gdi*_*nen 1 android filter android-arrayadapter android-listview
我想过滤歌曲标题和艺术家的listView.
目前我有一个关于歌曲标题的工作过滤器.但我无法弄清楚如何在同一时刻过滤歌曲标题和艺术家.
这是我的活动:
listView.setTextFilterEnabled(true);
inputSongTitle.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
adapterCorrectSong.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
Run Code Online (Sandbox Code Playgroud)
我在ArrayAdapter中使用此代码:
@Override
public Filter getFilter() {
if (songFilter == null){
songFilter = new SongFilter();
}
return songFilter;
}
private class SongFilter extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if(constraint != null && constraint.toString().length() > 0)
{
ArrayList<CorrectSongResponse> filteredItems = new ArrayList<CorrectSongResponse>();
for(int i = 0, l = allModelItemsArray.size(); i < l; i++)
{
CorrectSongResponse m = allModelItemsArray.get(i);
if(m.getTitle().toLowerCase().contains(constraint.toString())) {
filteredItems.add(m);
}
}
result.count = filteredItems.size();
result.values = filteredItems;
}
else
{
synchronized(this)
{
result.values = allModelItemsArray;
result.count = allModelItemsArray.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredModelItemsArray = (ArrayList<CorrectSongResponse>)results.values;
notifyDataSetChanged();
clear();
for(int i = 0, l = filteredModelItemsArray.size(); i < l; i++)
add(filteredModelItemsArray.get(i));
notifyDataSetInvalidated();
}
}
Run Code Online (Sandbox Code Playgroud)
我现在想要将addTextChangedListener添加到"inputSongArtist".如何同时过滤Title和Artist?
只需在自定义适配器中添加以下方法即可.
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
arrData.clear();
if (charText.length() == 0) {
arrData.addAll(arrDataFilter);
} else {
for (ContactMyDataClass cMDC : arrDataFilter) {
if(cMDC.getContactName().toLowerCase(Locale.getDefault()).contains(charText)){
arrData.add(cMDC);
}
}
}
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
然后
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapterContactList.filter(s.toString());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4226 次 |
| 最近记录: |