Сортировка позиций позиций с использованием FirebaseRecyclerAdapter
В моем приложении пользователи могут легко сортировать контент с одним специальным критерием, то есть orderByChild.
если они охотятся за физическим документом в Швейцарии
.orderByChild("Tag_country").equalTo("Physics_Switzerland");
если они охотятся за любым документом в Швейцарии
.orderByChild("Country").equalTo("Switzerland");
Пользователи могут сортировать содержимое на основе их даты публикации, количества раз, когда они были просмотрены, или количества мозгов\нравится одному сообщению.
.orderByChild("Views") // sort list by highest views
.orderByChild("Brains") // sort list by most likes\brains
.orderByChild("TimeStamp") // sort list by newest post\edit
Однако пользователь может не сортировать контент более одного раза, поскольку мы все можем знать
Вы можете использовать только метод один по порядку. Вызов метода заказа несколько раз в одном и том же запросе вызывает ошибку.
Так что-то вроде OrderByChild("Tag_country).equal("Physics_Switzerland").OrderByChild("Views");
приведет к сбою приложения
Я пытаюсь отсортировать уже заданный запрос, исходя из количества просмотров документа. То есть, в порядке убывания, покажите мне документы физики в Швейцарии, начиная от наивысшего до самого низкого уровня.
Как настраивается FirebaseRecycler
final Query DBquery = FirebaseDatabase.getInstance().getReference().child("PDF").child("Content")
.orderByChild("tag_Country").equalTo("Chemistry_Switzerland");
FirebaseRecyclerAdapter<pdfGstrings, Pdf_BlogViewHolder> fbRecyclerAdapter;
fbRecyclerAdapter = new FirebaseRecyclerAdapter<pdfGstrings, Pdf_BlogViewHolder>(
pdfGstrings.class,
R.layout.pdf_g_card,
Pdf_BlogViewHolder.class,
DBquery
) {
PdfRecycler.setAdapter(fbRecyclerAdapter);
fbRecyclerAdapter.notifyDataSetChanged();
Как заполняется представление
@Override
protected void populateViewHolder(final Pdf_BlogViewHolder viewHolder, final pdfGstrings model, final int position) {
final String post_key = getRef(position).getKey();
Render(viewHolder, model, post_key);
}
};
Я могу получить доступ к каждому количеству просмотров Pdf на
viewHolder.ViewCounts
Запрос
Как я могу манипулировать\изменить порядок позиций позиций, на стороне клиента и на основе целочисленного значения? Здесь целое значение viewHolder.ViewCounts
Пример. Программно выровняйте ячейку с 325 видами поверх ячейки с 92 видами.
![введите описание изображения здесь]()
![enter image description here]()
Структура детей
Pdf
Content
-Kd5YcEuE1yKTSdpaZi7
"Brains" : 2,
"Country" : "Switzerland",
"Tag_country" : "Chemistry_Switzerland",
"TimeStamp" : 12849127519,
"Views" : 92,
-Kd5YcoijSDujaxpaZsE
"Brains" : 12,
"Country" : "Switzerland",
"Tag_country" : "Chemistry_Switzerland",
"TimeStamp" 14349127519
"Views" : 352,
-Kd5YHDIUscDujaxpaZ13
"Brains" : 1,
"Country" : "Malaysia",
"Tag_country" : "Mathematics_Malaysia",
"TimeStamp" 14341221519
"Views" : 218,
-Kd5YHDIUJAdhxaxpas93
"Brains" 91,
"Country" : "Argentine",
"Tag_country" : "Archaeology_Argentine",
"TimeStamp": 14949127519,
"Views" : 928,
Ответы
Ответ 1
В моем запросе я пытался согласовать целое число внутри строки
OrderByChild("Tag_country_views")
Решение было довольно простым:
- Сохраняйте целое число в вашей дочерней структуре с помощью метода incrementing
- Создайте другое значение, которое переносит значение Views в строку String
String.valueOf(vh.Tag+"_"+vh.Country+"_"+vh.ViewsCount)
- Вместо OrderByChild рассмотрите возможность использования
startAt
и limitTo
, а также
например: будет ли пользователь фильтровать наиболее заметный математический документ в United Kingdoms? то все, что нужно сделать, это
OrderByChild("Tag_Country_Views")
.startAt("Mathematics_United Kingdoms)
.limitToFirst(DocumentsCount);
(результат)
![введите описание изображения здесь]()
Также требуется один небольшой трюк, счет должен, предпочтительно, начинаться с 1,000,000,000
просмотров, в то время как инкремент остается в 1+
![введите описание изображения здесь]()
Таким образом, запрос на String_value возможен.
![введите описание изображения здесь]()
Разделение на один миллиард и использование оператора модуля покажет фактическое количество просмотров
int CarrotCake = views % 1000000000;