Есть активность CartActivity, в котором расположен RecyclerView. Так же есть класс RecyclerViewAdapter. Для ViewHolder прописан ClickListener, где пользователю отображается AlertDialog с предложением удалить выбранный элемент из списка.
CarActivity.java
...
while (cursor.moveToNext()) {
currentItem = new Item();
currentItem.setId( cursor.getInt(idColumnIndex));
currentItem.setName(cursor.getString(nameColumnIndex));
currentItem.setPrice(Double.parseDouble(cursor.getString(priceColumnIndex)));
currentItem.setAmount(Integer.parseInt(cursor.getString(amountColumnIndex)));
currentItem.setImage(cursor.getString(imageColumnIndex));
sumOrder += currentItem.getPrice()*currentItem.getAmount();
items.add(currentItem);
}
mAdapter = new RecyclerViewAdapter(items, R.layout.row, this);
mRecyclerView.setAdapter(mAdapter);
progressBar.setVisibility(View.GONE);
mSwipeRefreshLayout.setRefreshing(false);
txtSumOrderView.setText(getString(R.string.txt_sum_order, sumOrder));
...
RecyclerViewAdapter.java
...
viewHolder.itemView.setOnClickListener(view -> {
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
(dialog, which) -> {
items.remove(currentItem);
notifyDataSetChanged();
}
});
alertDialog.show();
}
...
Как сказать активности, что списочный массив items с RecyclerView изменился, чтобы снова пересчитать общую сумму уже оставшихся позиций и обновить текст в элементе TextView у активности?
Ваша архитектура использует непродуктивное решение с копированием данных из базы в динамический список и помимо удаления из списка вам так же надо отдельно делать удаление из базы данных (первая часть ответа, решение для SimpleCursorAdapter
виджета ListView
, но сама проблема думаю понятна), что еще добавляет сумбура в реализацию.
Предлагаю вам обратить внимание на последние решения в организации архитектуры взаимодействия виджетов с данными, предложенную Google - Architecture Components (вторая часть ответа по ссылке выше). С появлением в библиотеке поддержки 27.1.0 класса адаптера для RecyclerView
ListAdapter
архитектура получила полный цикл взаимодействия и теперь любые операции с данными в БД автоматически отображаются на виджете, то есть теперь вам достаточно просто сделать записи, удаления, изменения в БД и они тут же будут отображены на экране.Естественно вам не понадобится никакое дублирование данных в списки, двойные операции по изменению данных и прочие ненужные проблемы.
Подробнее ознакомится с новой архитектурой можно по этой серии уроков
Так же стоит обратить внимание на то, что вычисления с данными в БД лучше доверить самой БД, а адаптеру только заниматься непосредственно выводом на экран, а не расчетами. В данном случае вы вычисляете значение sumOrder
в адаптере, можно доверить это БД, используя вычисляемые столбцы. Например:
SELECT price, count, price*count AS sum FROM items
Здесь в выборке мы получим 3 столбца: значения из столбцов price, count и вычисляемый столбец sum (он будет добавлен в выборку, хотя в таблице и нет такого столбца), с произведением первых двух столбцов. Теперь можно просто брать оттуда данные с нужным результатом, а не считать их в адаптере.
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
В уроках об FXML говорится об пользе и преимуществах разделения интерфейса и логики в программах, но есть ещё непонятный мне класс "Controller" (помимо...
Вопрос следующийЕсть некое приложение, в методе main оно выполняет действия, по ходу работы всю информацию логгирует и записывает в файл