android - Listview过滤器adapter.getFilter().filter(按多个值)

标签 android listview android-search android-filter android-filterable

我已经在android中创建了一个 ListView ,并且我已经通过使用searchview和charsequence作为参数来实现搜索过滤器,如下所示

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                adapter.getFilter().filter(query);
                return false;
            }
        });

现在如何获得多个值的过滤结果? adapter.getFilter().filter("example"|| "example"|| example); 可以这样做吗?或者我可以使用adapter.getFilter().filter(这里是数组)吗?

编辑: 这是我的过滤器

public class CustomFilter extends Filter {

    List<Event> filterList;
    EventAdapter adapter;

    public CustomFilter(List<Event> filterList, EventAdapter adapter) {
        this.filterList = filterList;
        this.adapter = adapter;
    }

    //FILTERING
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {

        //RESULTS
        FilterResults results=new FilterResults();

        //VALIDATION
        if(constraint != null && constraint.length()>0)
        {

            //CHANGE TO UPPER FOR CONSISTENCY
            constraint=constraint.toString().toUpperCase();

            ArrayList<Event> filteredEvent=new ArrayList<>();

            //LOOP THRU FILTER LIST
            for(int i=0;i<filterList.size();i++)
            {
                //FILTER (tinggal mainin logic aja mau filter berdasarkan apa nya )
                if(filterList.get(i).getJudul().toUpperCase().contains(constraint)|| filterList.get(i).getDeskripsi().toUpperCase().contains(constraint))
                {
                    filteredEvent.add(filterList.get(i));
                }
            }

            results.count=filteredEvent.size();
            results.values=filteredEvent;
        }else
        {
            results.count=filterList.size();
            results.values=filterList;
        }

        return results;
    }


    //PUBLISH RESULTS

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {

        adapter.eventes= (List<Event>) results.values;
        adapter.notifyDataSetChanged();

    }
}

最佳答案

您可以查看我的引用资料来解答您的问题。

我使用一个String来实现这一点,其中包括两个不同过滤器的值,并在String<中的两个值之间添加一个分割标记(在本例中为:“-”)/.

MainActivity.class

            String lat = latitude.getText().toString();
            String lon = longitude.getText().toString();
            //join the two strings and add a split mark '-'
            String join = lat + "-" + lon;  

            mca.getFilter().filter(join); //mca is my cursorAdapter
            mca.notifyDataSetChanged();

            mca.setFilterQueryProvider(new FilterQueryProvider() {
                @Override
                public Cursor runQuery(CharSequence constraint) {
                    String value = constraint.toString();
                    return getFilterResults(value);
                }

            });

getFilterResult(字符串filterValue)

 public Cursor getFilterResults(String filterValue) {

    Cursor c = getLoactionTimeEntry(); //some default init
    String lat = "";
    String lon = "";
    String[] splitFilterValue = filterValue.split("-");

    if(filterValue.charAt(0) == '-') {
        lon = splitFilterValue[1];
        c = getLongitudeFilter(lon);
    }
    else if(splitFilterValue.length == 2) {
        lat = splitFilterValue[0];
        lon = splitFilterValue[1];
        c = getLongtitudeLatitudeFilter(lat,lon);
    }
    else {
        lat = splitFilterValue[0];
        c = getLatitudeFilter(lat);
    }

    return c;
 }

在我的过滤器方法中,我使用函数split()分割String 并将值存储回单独的字符串变量。 函数:getLongitudeFilter(lon)getLongtitudeLatitudeFilter(lat,lon)getLatitudeFilter(lat) 在这种情况下,我的函数会返回一些 Cursor 以从数据库中获取我需要的内容。

关于android - Listview过滤器adapter.getFilter().filter(按多个值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36825456/

相关文章:

ListView 中的Android不同行

c# - ListView 无法使用 Xamarin Forms 正确呈现

android - 自定义 SearchView 在 android 中整个可点击

android:textisselectable 在 TYPE_SYSTEM_ALERT 窗口中不工作

android - 覆盖 Google 日历的默认提醒设置

android - 在 ListView 中回收 View ,值得吗?

java - Android:标签和搜索栏

android - 按姓名搜索联系人

Android:如果应用程序被卸载/降级,则不会删除应用程序私有(private)文件夹

c# - 如何在c#中将ArrayList添加到listview1