У меня есть список продуктов, каждая строка имеет функцию «Сохранить», которая будет хранить продукт товара в локальной базе данных. Я использую SwipeMenuListView через https://github.com/baoyongzhang/SwipeMenuListView, и мне нужно проверить, что запись существует или нет в getItemViewType в ListAdapter для удаления функции. Сохранение сохраненной строки. Но проблема в том, что «контрольная запись существует или нет» заставляла мое замораживание списка после notifyDataSetChanged какое-то время (нажмите «Сохранить», затем notifyDataSetChanged, тогда список замерзает, пока я не коснусь списка). Как это исправить? Каждое предложение будет высоко оценено. Заранее спасибо. Вот мой код:Как проверить запись существует в базе данных внутри getItemViewType
@Override
public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
switch (index) {
case 0:
break;
case 1:
ProductDetailsVo.ProductInfo productInfo = listResult.get(position);
insertProductToDB(productInfo);
break;
}
и метод insertProductToDB:
private void insertProductToDB(ProductDetailsVo.ProductInfo productInfo) {
databaseManager.insertProductToDB(productInfo);
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
адаптер:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (databaseManager.isProductSaved(listProds.get(position).getProductId())) {// cause listview freeze
return 1;
}
return 0;
}
Да, проблема в том, что databaseManager.isProductSaved запускался в потоке пользовательского интерфейса. Я подумал о поле «isExist» в объекте, но если пользователь вернется к предыдущему экрану, тогда он появится после загрузки с сервера. –
Заполните поле 'exist' сразу после получения элементов и перед отображением списка. – tbruyelle
Как я могу проверить элемент продукта, который извлекается с сервера, сохраняется в локальном db? Может быть, мне нужен массив для хранения сохраненных идентификаторов? –