Отображение заголовка одной даты о нескольких строках (Recycleview) - PullRequest
0 голосов
/ 06 января 2019

Вечер всех

В настоящее время у меня есть простой адаптер представления корзины, который заполняется базой данных SQL Lite. Пользователь может добавить информацию в базу данных из приложения, которое затем строит строку в представлении перезапуска. Когда вы запускаете приложение, оно будет отображать каждую строку со своей датой прямо над ней. Теперь я хочу, чтобы приложение выглядело более профессионально, отображая только одну дату над несколькими записями в качестве заголовка.

До сих пор я построил 2 пользовательских проекта, один из которых отображает заголовок вместе со строкой, а другой - просто стандартную строку без встроенного заголовка. Я также понимаю, как реализовать два макета в одном адаптере.

Я также включил одну строку в свою базу данных, которая просто хранит дату таким образом, чтобы я мог упорядочить базу данных, например. 20190101

Теперь мой ключевой вопрос заключается в том, чтобы при заполнении адаптера информацией из базы данных SQL Lite можно было проверить, имеет ли предыдущая запись ту же дату. Если запись имеет ту же дату, то ей не нужно показывать пользовательскую строку с заголовком, но если это новая дата, то это значит?

Спасибо

/////////////////////////////////////////////// //////////////////////////////

Последующий вопрос для Крокодилко, я провел последний час, пытаясь внедрить вашу реализацию в мой SQL Lite, но все еще не смог найти комбинацию.

ниже строки исходного кода SQL Lite, которую я сейчас использую, чтобы просто получить все результаты.

Cursor cursor =  sqLiteDatabase.rawQuery("SELECT * FROM " + Primary_Table + " " , null);

1 Ответ

0 голосов
/ 06 января 2019

Сначала вы должны определить порядок, который будет использоваться для определения, какая запись является предыдущей, а какая - следующей. Как я понимаю, вы просто используете date столбец.

Тогда запрос прост - используйте аналитическую функцию LAG , чтобы выбрать значение столбца из предыдущей строки, вот ссылка на простую демонстрацию (нажмите кнопку «Выполнить»):
https://sqliteonline.com/#fiddle-5c323b7a7184cjmyjql6c9jh

DROP TABLE IF EXISTS d;
CREATE TABLE d(
  d date
);
insert into d values ( '2012-01-22'),( '2012-01-22'),( '2015-01-22');

SELECT *,
      lag( d ) OVER (order by d ) as prev_date,
      CASE WHEN d = lag( d ) OVER (order by d )
           THEN 'Previous row has the same date'
           ELSE 'Previous row has different date'
      END as Compare_status
FROM d
ORDER BY d;

В приведенном выше демо d столбец используется в предложении OVER (order by d ) для определения порядка строк, используемых функцией LAG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...