1

我想过滤歌曲标题和艺术家的列表视图。

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

这是我的活动:

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。如何同时过滤标题和艺术家?

4

1 回答 1

6

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

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());
}
于 2013-09-11T07:16:12.947 回答