Помогите обдумать логику для RecyclerView adapter

191
17 апреля 2018, 05:13

Здравствуйте, у меня имеется RecyclerView который выводит списком какое нибудь число и дату, бывают ситуации когда подряд идут несколько строк с одной и той же датой.

Есть ли какая то возможность сделать отображение даты только в той строке где дата изменилась? т.е. в первой строке пишем дату, во 2 строке если дата такая же то ее не отображаем, далее если в 3 строке дата изменилась то снова отображаем.

Я так думаю это надо в CursorAdapter делать в getItemViewType, но никак не могу проработать это.

Answer 1

Адаптер вашего RecyclerView должен только получать массив данных и отображать это.

Так что логику обработки исходных данных нужно выполнять на этапе получения этих данных.

А getItemViewType используется в тех случаях, когда в RecyclerView требуется отображать элементы, внешний вид которых нужно изменять в зависимости от определённых параметров.

Как пример, окно диалога (чат), где ваши сообщения отображаются справа, а сообщения собеседника - слева.

Если у вас сложности с проработкой алгоритма, то, на мой взгляд, это будет выглядеть следующим образом:

// ваш массив с данными
List<Date> dateList = new ArrayList<>();
// предыдущее значение даты
Date previousDate = null;
for(Date currentDate: dateList) {
   if(previousDate != null && currentDate == previousDate) {
      // или можно наполнять новый список, если не хотите менять существующий
      dateList.remove(currentDate);
   } else {
      previousDate = currentDate;
   }
}
Answer 2

Сравните дату текущей позиции с предыдущей. Если они совпадают - скрывайте текущую дату.

@Override
public void onBindViewHolder(AdapterRecycler.ViewHolder viewHolder, int i) {
   if (i>0)
       if (adapterList.get(i-1).getDate==adapterList.get(i).getDate)
           viewHolder.dataText.setVisible(View.INVISIBLE);
       else
            viewHolder.dataText.setVisible(View.VISIBLE);
}
READ ALSO
вопросы вместо букв

вопросы вместо букв

Вместо кириллицы отображаются вопросыВот способ соединения с БД:

382
Как вывести строку матрицы где есть максимальный элемент определенного столбца?

Как вывести строку матрицы где есть максимальный элемент определенного столбца?

Пользователь вводит номер столбца в котором ищется максимальный элемент:

251