tvacstudio - один из лучших преподавателей Firebase. К сожалению, некоторые из его видео с Firebase устарели;Чтобы решить эту проблему, пожалуйста, сделайте это
В вашем onStart ()
@Override
protected void onStart() {
super.onStart();
firebaseRecyclerAdapter.startListening();
}
, а также в onStop ():
@Override
protected void onStop() {
super.onStop();
firebaseRecyclerAdapter.stopListening();
}
PS: ваш зритель должен вернутьпредставление и bindViewHolder никогда не используются для заполнения данными, которые будут отображаться в вашем RecyclerView.
Помните, что в вашем видоискателе вы должны передать строку макета (представление, в котором вы создали элементы, которые будут видны дляпользователь (например, представления изображений, текстовые представления и т. д.) после того, как вы поместили это представление в свой видоискатель, вам нужно связать каждое из этих представлений в свой onBindViewHolder, чтобы заполнить их данными.
Вы передаете держатель видапредставление здесь:
View mView;
public UsersViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
и получение его здесь:
@Override
public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_test_layout, parent, false);
return new UsersViewHolder(view);
}
Это хорошо, и это нормально, но вам нужно заполнить данные из list_test_layout в вашем onbindviewholder, иначе вы будетене вижу результатов:
@Override
protected void onBindViewHolder(UsersViewHolder holder, int position, UsersTest model) {
// Bind the Users object to the UsersViewHolder
// ...
}
Пожалуйста, ознакомьтесь с официальной документацией, чтобы лучше понять, как она работает:
https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md
Например, полный комплект bindViewHolder и ViewHolder должен выглядеть следующим образом:
@Override
protected void onBindViewHolder(PeopleVH holder, int position, PersonModel model) {
holder.setPersonFirstName(model.getFirstName()); // we are setting to the holder view the firstname of a user
holder.setPersonLastName(model.getLastName()); // and we are binding the same data into the lastname
}
@Override
public PeopleVH onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.single_row_people_rv, parent, false); // here as you can see is the "user_row.xml" that will contain 2 textviews for user name and lastname
return new PeopleVH(view); // now we return a view in the viewholder in order to access it in the bindviewholder and reference to each of those views to populate
}
};
Теперь, применяя это к вашим данным, он должен выглядеть следующим образом
@Override
protected void onBindViewHolder(UsersViewHolder holder, int position, UsersTest model) {
// just call your UsersTest bean and popualate the data , this is just an example , i dont know what fields you have in UsersTest
holder.setPersonFirstName(model.getFirstName()); // we are setting to the holder view the firstname of a user
holder.setPersonLastName(model.getLastName()); // and we are binding the same data into the lastname
}
@Override
public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_test_layout, parent, false); // here as you can see is the "user_row.xml" that will contain 2 textviews for user name and lastname
return new UsersViewHolder(view); // now we return a view in the viewholder in order to access it in the bindviewholder and reference to each of those views to populate
}
};