Android заказывает элементы Firebase по ключу, который является датой - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть список дочерних элементов в моей базе данных, и имя ключа - это даты. Теперь я хочу упорядочить эти элементы таким образом, чтобы я мог сначала датировать последний элемент, а также я использую пользовательский приемник для отображения этих данных с помощью FirebaseRecyclerAdapter, и я также нужно получить дочерний ключ, когда я нажимаю на элемент: Это мой ребенок выглядит как смотреть здесь

и это мой код для отображения данных

  DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("winners");
        Query personsQuery = personsRef.orderByKey();

        mPeopleRV.hasFixedSize();


        LinearLayoutManager mLayoutManager = new LinearLayoutManager(Notification.this);
        mLayoutManager.setReverseLayout(true);
        mLayoutManager.setStackFromEnd(true);

        mPeopleRV.setLayoutManager(mLayoutManager);

        FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();

        mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
            @Override
            protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {


                holder.setTitle(capitalize(model.getName()));
                holder.setDesc(model.getDate().replace('-', ' '));
                holder.setAmount(model.getAmount());
                holder.setImage(getBaseContext(), model.getImg());


                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                       //Here i need child key when click on item (Date)


                    }
                });
            }

            @Override
            public Notification.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.news_row, parent, false);

                return new Notification.NewsViewHolder(view);
            }
        };

        mPeopleRV.setAdapter(mPeopleRVAdapter);

Вещи, которые мне нужны:

  1. Упорядочить элементы по дате (в этом примере самая поздняя дата первой позиции
    02-Sep-2018)

  2. получить ключ, когда пользователь нажимает на элементы (ключ, т.е. дата)

1 Ответ

0 голосов
/ 03 сентября 2018

Невозможно отсортировать элементы по дате, если вы не внесете некоторые изменения в схему базы данных. Даже если ваши ключи содержат какое-то король «даты» (02-Sep-2018), нет способа упорядочить их по дате, потому что все ключи Firebase являются строками, а когда строки упорядочены, они упорядочены лексикографически.

Чтобы решить эту проблему, вы должны добавить новое свойство timestamp к каждому из ваших объектов, как объяснено здесь . Предполагая, что эти объекты находятся в узле с именем dates, просто используйте запрос, подобный следующему:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("dates").orderByChild("timestamp");
query.addListenerForSingleValueEvent(/* ... */);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...