gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 08:35:46 26 4
gpt4 key购买 nike

我已经在 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("示例"|| "示例"|| 示例);有可能这样做吗?或者我可以使用 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(String 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 filter adapter.getFilter().filter(按多个值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36825456/

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