Я хочу использовать FirebaseRecyclerAdapter
в моем проекте, и я использовал этот сегмент кода в предыдущем проекте
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);
и он отлично работает, но теперь он больше не работает, есть ли обновление в новой версии FirebaseUi
которое не позволяет мне повторно использовать этот код сейчас?
Я пробовал это в своем проекте
@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); }
и Android Studio дает сообщение о том, что вы должны реализовать onCreateViewHolder,onBindViewHolder
Method.
Класс 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) { } }); } }
Я использую эту зависимость
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'
Синтаксис изменился. Раздел документа, излагающий вызовы, приведен здесь:
https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md
Вот файл с градиентом приложения с версиями Firebase Database и FirebaseUI:
// FirebaseUI for Firebase Realtime Database compile 'com.firebaseui:firebase-ui-database:3.1.0' compile 'com.google.firebase:firebase-database:11.4.2'
У меня есть стандартные классы ViewHolder и Model. Я оставлю их для краткости.
Переменные экземпляра в верхней части моего класса фрагментов:
private RecyclerView mPeopleRV; private FirebaseRecyclerAdapter<PersonModel, PeopleVH> mPeopleRVAdapter;
В onCreateView () моего фрагмента:
mPeopleRV = v.findViewById(R.id.peopleRV);
В onActivityStarted () моего фрагмента есть все действия.
onCreateViewHolder – это то, где разметка строк раздувается. И bindViewHolder () – это место, где вы заполняете строку данными модели, полученными из Firebase.
Конструктор адаптера теперь принимает набор опций, которые вы определяете на основе вашего запроса и модели.
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);
Добавлено позже:
Не забудьте запустить и остановить прослушиватель адаптера в onStart () и onStop ():
@Override public void onStart() { super.onStart(); mPeopleRVAdapter.startListening(); } @Override public void onStop() { super.onStop(); mPeopleRVAdapter.stopListening(); }