Поиск в базе данных SqLite с использованием Searchview - PullRequest
0 голосов
/ 08 января 2019

Я вставляю данные в мои два фрагмента из базы данных SqLite. Первый - для еды, а второй - для напитков. Мой экран . Поиск в каждом окне работает нормально, но когда я меняю фрагменты или набираю что-то в строке поиска, а затем удаляю это, все данные появляются. Проблема Я хочу иметь один фрагмент для поиска в продуктах и ​​один для напитков. Я не уверен, что проблема в запросе или в методах поиска.

Это мой метод onCreateOptionMenu

  @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_search, menu);
    MenuItem item = menu.findItem(R.id.menuSeach);
    SearchView searchView = (SearchView) item.getActionView();


    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            Log.d(TAG, "onQueryTextSubmit ");
            cursor = productData.getProductListByFood(query);
            if (cursor == null) {
                Toast.makeText(getContext(), "No records found!", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getContext(), cursor.getCount() + " records found!", Toast.LENGTH_LONG).show();
            }
           todoAdapter.swapCursor(cursor);

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            Log.d(TAG, "onQueryTextChange ");
            cursor = productData.getProductListByFood(newText);
            if (cursor != null) {
               todoAdapter.swapCursor(cursor);
            }
            return false;
        }

    });
}

Запрос, который я использую для поиска,

 public Cursor getProductListByFood(String search) {
    SQLiteDatabase db = productData.getReadableDatabase();

    String typeQuery = "select * from " + PRODUCT_TABLE + " WHERE " + COL_PRODUCT_TYPE + "  LIKE '%Food%' " + " AND " + COL_PRODUCT_NAME + "  LIKE  '%" + search + "%' " + " OR " + COL_PRODUCT_PRICE + " LIKE '%" + search + "%' ";
    Cursor cursor = db.rawQuery(typeQuery, null);


    if (cursor == null) {
        return null;
    } else if (!cursor.moveToFirst()) {
        cursor.close();
        return null;
    }
    return cursor;
}

Код для напитка, фрагменты еды и запросы похожи. Вот и мой адаптер на случай, если есть проблема

public Adapter(Context context, Cursor c, int flags) {
    super(context, c, flags);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.adapter_layout,parent,false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
   TextView tvProduct = (TextView) view.findViewById(R.id.txtview);


        String name = cursor.getString(cursor.getColumnIndexOrThrow("NAME"));
        String price = cursor.getString(cursor.getColumnIndexOrThrow("PRICE"));
        tvProduct.setText(String.format("%s - %s",name,price));



}
...