Как обновить ссылку на запрос адаптера firebase recycler?

#android #firebase #firebase-realtime-database #firebaseui

#Android #firebase #firebase-realtime-база данных #firebaseui

Вопрос:

У меня есть RecyclerView привязка к a FirebaseRecyclerAdapter . Мне нужно обновить отображаемые данные на основе значения, установленного пользователем с помощью spinner .

Что-то вроде этого:

 FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference ref = db.getReference("data");
Query query = ref.orderByChild("index").startAt(loadPreferences()).endAt(loadPreferences());
final Adapter fireAdapter = new Adapter(Model.class, R.layout.model_card, Adapter.FireViewHolder.class, query);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String selectedIndex = String.valueOf(adapterView.getItemAtPosition(i));
            savePreferences(selectedIndex);
            Query newQuery = ref.orderByChild("index").startAt(selectedIndex).endAt(selectedIndex));
            fireAdapter.updateQuery(newQuery); //This is what i'm looking for
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });
  

Мой адаптер:

 class Adapter extends FirebaseRecyclerAdapter<Model, Adapter.FireViewHolder> {

Adapter(Class<Model> modelClass, int modelLayout, Class<FireViewHolder> viewHolderClass, Query ref) {
    super(modelClass, modelLayout, viewHolderClass, ref);
}

@Override
protected void populateViewHolder(FireViewHolder viewHolder, Model model, int position) {
    viewHolder.text.setText(model.getText());
}

static class FireViewHolder extends RecyclerView.ViewHolder {

    TextView text;

    public FireViewHolder(View itemView) {
        super(itemView);
        text = (TextView) itemView.findViewById(R.id.textView);
    }
}

public void updateQuery(Query newQuery){
     ???????
}
} 
  

Ответ №1:

Не удалось найти правильный ответ, но в качестве временного обходного пути просто создать новый адаптер и настроить его на RecyclerView работу. Все еще считаю, что должен быть более элегантный способ сделать это.

Комментарии:

1. не могли бы вы стать лучшим и поделиться тем, как вы изменили свой путь?

Ответ №2:

Используйте FirebaseRecyclerViewAdapter решение реализовано. Или объедините одно и то же изменение кода с вашей базой приложений.

https://firebaseui.com/docs/android/index.html?com/firebase/ui/FirebaseRecyclerViewAdapter.html