I want to filter a listView on song title and artist.
Currently I have a working filter on song title. But I can't figure out how to filter on song title and artist at the same moment.
This is my activity:
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) {
}
});
I use this code in my 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();
}
}
I now want to add an addTextChangedListener to "inputSongArtist". How can I filter both on Title and Artist at the same time?