Я вставляю данные в мои два фрагмента из базы данных 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));
}