如何在回收站视图和sqlite中使用搜索视图?

时间:2019-08-27 13:05:17

标签: android

我需要在带有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;
    }

如何从数据库中获取过滤后的值并在回收站视图上进行设置,而不会退回回收站视图

1 个答案:

答案 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
                    }

                }
            };

    }
相关问题