Сортировка позиций позиций с использованием 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 видами. Введите описание изображения здесь

Введите описание изображения здесь

Структура детей

 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, 

В моем запросе я изо всех сил пытался учесть целое число внутри строки

OrderByChild("Tag_country_views")

Решение было спокойным:

  • Храните целое число в дочерней структуре с помощью метода увеличения
  • Создайте другое значение, которое String.valueOf(vh.Tag+"_"+vh.Country+"_"+vh.ViewsCount) значение 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;