gpt4 book ai didi

Android - 如何过滤多个值的 ListView ?

转载 作者:行者123 更新时间:2023-11-29 15:20:34 25 4
gpt4 key购买 nike

我想根据歌曲名称和艺术家过滤 listView。

目前我有一个关于歌名的过滤器。但我不知道如何同时过滤歌曲名称和艺术家。

这是我的 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) {
}
});

我在我的 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();
}
}

我现在想添加一个 addTextChangedListener 到“inputSongArtist”。如何同时过滤标题和艺术家?

最佳答案

只需在您的自定义适配器中添加以下方法即可。

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();
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapterContactList.filter(s.toString());
}

关于Android - 如何过滤多个值的 ListView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18722444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com