Сортировка позиций позиций с использованием 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;