Как реализовать ViewModel с помощью FirebaseRecyclerAdapter

#android #firebase #firebase-realtime-database #viewmodel #android-jetpack

#Android #firebase #firebase-база данных в реальном времени #viewmodel #android-реактивный ранец

Вопрос:

Я пытаюсь отделить свою базу данных от моего пользовательского контроллера с помощью ViewModel и предотвратить постоянное использование данных. Я искал решение в течение нескольких дней без какого-либо прогресса. Я использую Firebase RecyclerAdapter в своем приложении, и код работает хорошо, но я не знаю, как реализовать LiveData Observer с помощью RecyclerAdapter. любой пример приложения или фрагмент кода окажет мне большую помощь.

Вот пример кода из моего фрагмента

 private void fetchValues() {
    Query query1 = mDatabaseReference;

    FirebaseRecyclerOptions<Course> options = new FirebaseRecyclerOptions.Builder<Course>()
            .setQuery(query1, new SnapshotParser<Course>() {
                @NonNull
                @Override
                public Course parseSnapshot(@NonNull DataSnapshot snapshot) {
                    return new Course(snapshot.child("course_title").getValue().toString(),
                            snapshot.child("course_code").getValue().toString(),
                            snapshot.child("course_lecturer").getValue().toString());
                }
            })
            .build();

    mFirebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Course, CourseViewHolder>(options){
        @NonNull
        @Override
        public CourseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            mCourseItemBinding = CourseItemBinding.inflate(LayoutInflater.from(getActivity()), parent, false);
            View view = mCourseItemBinding.getRoot();
            return new CourseViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull CourseViewHolder holder, int position, Course course) {
            holder.bind(course);
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(getActivity(), String.valueOf(position), Toast.LENGTH_LONG).show();
                }
            });
        }
    };

    mRecyclerView.setAdapter(mFirebaseRecyclerAdapter);
}
  

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

1. Как я вижу, вы используете библиотеку Firebase-UI, которая предоставляет обновления в режиме реального времени, но я не вижу никакого кода, связанного с ViewModel или LivedData в том, чем вы уже поделились.

2. Как я уже сказал, я не знаю, как это сделать, используя Firebase-UI. Любые советы окажут большую помощь

3. Насколько я знаю, не стоит смешивать шаблон MVVM и Firebase-UI. Вы можете использовать любой из них. Используйте Firebase-UI и реализуйте во фрагменте или activity или извлекайте данные отдельно из firebase в view model и передавайте их во фрагмент или activity с помощью наблюдателей.