曲のタイトルとアーティストで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) {
}
});
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();
}
}
「inputSongArtist」に addTextChangedListener を追加したいと思います。タイトルとアーティストの両方を同時にフィルターするにはどうすればよいですか?