Need To Get the Text & Image From FireBase Database And View them Using FireBase RecyclerAdapter But the Problem is:
- There is a red line Under
FirebaseRecyclerAdapter<Category, MenuViewHolder>which said
Class 'Anonymous class derived from FirebaseRecyclerAdapter' must either be declared abstract or implement abstract method 'onBindViewHolder(VH, int, T)' in 'FirebaseRecyclerAdapter'
- populateViewHolder I write it manully I think this method is depreciated.
Click to See a Picture Which Shows the Problems
private void loadMenu() {
FirebaseRecyclerAdapter<Category,MenuViewHolder> adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder> (Category.class , R.layout.menu_item , MenuViewHolder.class , category){
@Override
protected void populateViewHolder(@NonNull MenuViewHolder viewHolder, Category model, int position) {
viewHolder.txtMenuName.setText(model.getName());
Picasso.get().load(model.getImage()).into(viewHolder.ImageView);
Category clickItem = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Toast.makeText(Home.this, "" clickItem.getName(), Toast.LENGTH_SHORT).show();
}
});
}
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
};
recycler_menu.setAdapter(adapter);
}
Thanks A Lot
CodePudding user response:
You should override onBindViewHolder so it can call populateViewHolder.
try something like this:
@Override
public void onBindViewHolder(VH viewHolder, int position) {
Category model = getItem(position);
populateViewHolder(viewHolder, model, position);
}
Also, I believe that in onCreateViewHolder you should inflate your item layout and return a new ViewHolder.
CodePudding user response:
To use the adapter's from FirebaseUI, you need to override them and implement both onCreateViewHolder and onBindViewHolder. There is no need for a populateViewHolder method though.
From the FirebaseUI documentation on Using the FirebaseRecyclerAdapter comes this minimal example:
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Chat, ChatHolder>(options) {
@Override
public ChatHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new instance of the ViewHolder, in this case we are using a custom
// layout called R.layout.message for each item
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.message, parent, false);
return new ChatHolder(view);
}
@Override
protected void onBindViewHolder(ChatHolder holder, int position, Chat model) {
// Bind the Chat object to the ChatHolder
// ...
}
};
Most of the code you have in populateViewHolder now, will end up in onBindViewHolder when using FirebaseUI.
