我需要在带有sqlite的回收站适配器中使用过滤器以在回收站视图中搜索项目
我在回收站适配器中制造了过滤器
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
DatabaseHelper helper=new DatabaseHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
String query = "SELECT * FROM "+ Verbs.BTable_Name+" WHERE "+Verbs.BCOL_1+" like '%"+charText+"%'";
Brand.brandList.clear();
Cursor c = db.rawQuery(query, null);
if (c.moveToFirst()) {
do {
for (BrandSandG wp : brandSandGListFull) {
wp = new BrandSandG(c.getInt(0), c.getString(1));
if (wp.getName().toLowerCase(Locale.getDefault()).contains(charText)) {
Brand.brandList.add(wp);
}
}
} while (c.moveToNext());
}
notifyDataSetChanged();
}
搜索视图
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.filter(newText);
return true;
}
如何从数据库中获取过滤后的值并在回收站视图上进行设置,而不会退回回收站视图
答案 0 :(得分:0)
搜索文字将通过以下代码传递到recyclerView。
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return true;
}
然后RecyclerViewAdapter类应实现可过滤
public class DashboardRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Filterable {
//constructor loads data to dataList
DashboardRecyclerViewAdapter(ArrayList<Object> data,Context context)
{
this.context = context;
this.dataList = data;
this.filteredDataList = new ArrayList<>(data.size());
this.filteredDataList.addAll(dataList);
}
//override this method, it gets the SerchText and then compares with dataList
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
ArrayList<Object> filteredDataList_temp = new ArrayList<>();
String charString = charSequence.toString().toLowerCase();
if (charString.isEmpty() || charString.trim().length() == 0 ) {
filteredDataList_temp = dataList;
} else {
for (Object row : dataList) {
FoodDetail r = (FoodDetail) row;
if (foodName.contains(charString)) {
filteredDataList_temp.add(row);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredDataList_temp;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (filteredDataList != null) {
filteredDataList.clear();
filteredDataList.addAll((ArrayList<Object>) results.values);
notifyDataSetChanged(); //once completed Then RecyclerView updated with only searched List
}
}
};
}