android firebase firebase-realtime-database firebaseui

android - No puedo encontrar el método populateViewHolder en la clase FirebaseRecyclerAdapter



firebase-realtime-database firebaseui (2)

Quiero usar FirebaseRecyclerAdapter en mi proyecto y usé este segmento de código en un proyecto anterior

FirebaseRecyclerAdapter<ChatMessage, ChatMessageViewHolder> adapter = new FirebaseRecyclerAdapter<ChatMessage, ChatMessageViewHolder>(ChatMessage.class, android.R.layout.two_line_list_item, ChatMessageViewHolder.class, ref) { public void populateViewHolder(ChatMessageViewHolder chatMessageViewHolder, ChatMessage chatMessage, int position) { chatMessageViewHolder.nameText.setText(chatMessage.getName()); chatMessageViewHolder.messageText.setText(chatMessage.getMessage()); } }; recycler.setAdapter(mAdapter);

y funcionaba bien, pero ahora ya no funciona. ¿Hay alguna actualización en la nueva versión de FirebaseUi que no me permita reutilizar este código ahora?

Intenté esto en mi proyecto

@Override protected void onStart() { super.onStart(); FirebaseRecyclerAdapter<BlogModel, BlogListViewHolder> adapter = new FirebaseRecyclerAdapter<BlogModel, BlogListViewHolder>(BlogModel.class, android.R.layout.two_line_list_item, BlogListViewHolder.class, mDatabaseReference) { public void populateViewHolder(BlogListViewHolder blogListViewHolder, BlogModel blogModel, int position) { blogListViewHolder.postTitle.setText(blogModel.getPostTitle()); blogListViewHolder.postDesc.setText(blogModel.getPostDesc()); } }; mBlogList.setAdapter(adapter); }

y Android Studio da un error que dice que debe implementar onCreateViewHolder,onBindViewHolder método onCreateViewHolder,onBindViewHolder .

Clase BlogListViewHolder

public static class BlogListViewHolder extends RecyclerView.ViewHolder { ImageView postImage; TextView postTitle; TextView postDesc; public BlogListViewHolder(View view) { super(view); postImage = view.findViewById(R.id.blog_image_id); postTitle = view.findViewById(R.id.blog_title_id); postDesc = view.findViewById(R.id.blog_desc_id); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } }

Yo uso estas dependencias

dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) androidTestCompile(''com.android.support.test.espresso:espresso-core:2.2.2'', { exclude group: ''com.android.support'', module: ''support-annotations'' }) compile ''com.android.support:appcompat-v7:26.0.2'' compile ''com.google.firebase:firebase-auth:11.4.2'' compile ''com.google.firebase:firebase-database:11.4.2'' compile ''com.google.firebase:firebase-storage:11.4.2'' compile ''com.firebaseui:firebase-ui-database:3.1.0'' compile ''com.firebaseui:firebase-ui-firestore:3.1.0'' compile ''com.firebaseui:firebase-ui-auth:3.1.0'' compile ''com.firebaseui:firebase-ui-storage:3.1.0'' testCompile ''junit:junit:4.12'' compile ''com.squareup.picasso:picasso:2.5.2'' } apply plugin: ''com.google.gms.google-services''


Además de la respuesta de @ Lucy. Ahora, hay propietarios de ciclo de vida de componentes de arquitectura. Según el documento de Android firestoreui

Si no desea iniciar / detener la escucha manualmente, puede usar los Componentes de Arquitectura de Android para administrar automáticamente el ciclo de vida del FirestoreRecyclerAdapter . Pase un LifecycleOwner a FirestoreRecyclerOptions.Builder.setLifecycleOwner(...) y FirebaseUI comenzará y dejará de escuchar onStart() en onStart() y onStop() .

En esta situación específica, personsOptions.setLifecycleOwner(myFragmentOrActivity.this)


La sintaxis ha cambiado. La sección del documento que describe las llamadas está aquí:

https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md

Aquí está el archivo gradle de la aplicación con Firebase Database y FirebaseUI versiones:

// FirebaseUI for Firebase Realtime Database compile ''com.firebaseui:firebase-ui-database:3.1.0'' compile ''com.google.firebase:firebase-database:11.4.2''

Tengo definidas las clases estándar ViewHolder y Model. Los dejaré afuera por brevedad.

Variables de instancia en la parte superior de mi clase Fragment:

private RecyclerView mPeopleRV; private FirebaseRecyclerAdapter<PersonModel, PeopleVH> mPeopleRVAdapter;

En onCreateView () de mi Fragmento:

mPeopleRV = v.findViewById(R.id.peopleRV);

En onActivityStarted () de mi Fragmento es donde está toda la acción.

onCreateViewHolder es donde se infla el diseño de la fila. Y bindViewHolder () es donde rellena la fila con los datos de su modelo obtenidos de Firebase.

El constructor para el adaptador ahora toma un conjunto de opciones que usted define en función de su consulta y modelo.

DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("People"); Query personsQuery = personsRef.orderByKey(); mPeopleRV.hasFixedSize(); mPeopleRV.setLayoutManager(new LinearLayoutManager(getActivity())); FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<PersonModel>().setQuery(personsQuery, PersonModel.class).build(); mPeopleRVAdapter = new FirebaseRecyclerAdapter<PersonModel, PeopleVH>(personsOptions) { @Override protected void onBindViewHolder(PeopleVH holder, int position, PersonModel model) { holder.setPersonFirstName(model.getFirstName()); holder.setPersonLastName(model.getLastName()); } @Override public PeopleVH onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.single_row_people_rv, parent, false); return new PeopleVH(view); } }; mPeopleRV.setAdapter(mPeopleRVAdapter);

Agregado más tarde:

No olvide iniciar y detener la escucha del adaptador en onStart () y onStop ():

@Override public void onStart() { super.onStart(); mPeopleRVAdapter.startListening(); } @Override public void onStop() { super.onStop(); mPeopleRVAdapter.stopListening(); }