@Bravis2018

Как обновить TextView при изменении в RecyclerView?

Есть активность CartActivity, в котором отображается RecyclerView. Так же есть класс RecyclerViewAdapter, где для ViewHolder прописан ClickListener, где пользователю отображается AlertDialog с предложением удалить выбранный элемент из списка.
CartActivity.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 у активности?
  • Вопрос задан
  • 527 просмотров
Решения вопроса 1
Endru9
@Endru9
Админ Linux
т.к. у вас данные хранятся в бд - есть несколько способов это сделать:
1) использовать room - он сам будет управлять данными в бд. примеров в интернете работы с room уже достаточно много.
2) сделать интерфейс в активити, объявить метод и передавать его в адаптер. Обработку нажатия на элемент в вашем случае лучше обрабатывать сразу в активити - для этого назначить нужному элементу android:onClick, после описать метод в активити. Для динамических обновлений данных в адаптере тоже существует 2 способа:
а) каждый раз передавать новый курсор в адаптер - что может быть накладным и приводить к тормозам при работе.
б) сделать отдельный массив, например SparseIntArray, который будет отвечать за динамическую часть. Передавать его в адаптер, объявить методы в адаптере на изменение динамических данных, и вызывать mAdapter.notifyDataSetChanged() при изменении данных.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
LemonRX
@LemonRX
Начинающий Android разработчик
Для того чтобы сообщить адаптеру, что данные изменились существует метод notifyDataSetChanged();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы