我正在学习不到 3 个月前的教程,所以我认为它不会过时。我在我的 Android 项目中使用了 FirebaseRecyclerAdapter
。目前我正在尝试搜索存储在我的 Firebase
中的书籍并返回匹配的书籍,在我的 searchBook
方法中我使用的是 FirebaseRecyclerAdapter
。然而,当我声明我的 FirebaseRecyclerAdapter = new Firebas...
时,我被迫实现两种方法,onBindviewHolder
和 onCreateViewHolder
。我认为我不需要这些,或者如果我需要,有人可以向我解释为什么我需要吗?
目前这是我的代码:
private void searchBook(){
FirebaseRecyclerAdapter<Book, BookViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Book, BookViewHolder>(
Book.class,
R.layout.listview_booksearchresults,
BookViewHolder.class,
bookDatabase
) {
protected void populateViewHolder(BookViewHolder viewHolder, Book model, int position){
viewHolder.setDetails(model.getTitle(), model.getAuthor(), model.getImageURL());
}
};
mResultList.setAdapter(firebaseRecyclerAdapter);
}
如果我点击实现这两个方法,我的代码就会像没有明天一样错误百出。
实现方法后的代码:
private void searchBook(){
FirebaseRecyclerAdapter<Book, BookViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Book, BookViewHolder>(
Book.class,
R.layout.listview_booksearchresults,
BookViewHolder.class,
bookDatabase
) {
@NonNull
@Override
public BookViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
@Override
protected void onBindViewHolder(@NonNull BookViewHolder holder, int position, @NonNull Book model) {
}
protected void populateViewHolder(BookViewHolder viewHolder, Book model, int position){
viewHolder.setDetails(model.getTitle(), model.getAuthor(), model.getImageURL());
}
};
mResultList.setAdapter(firebaseRecyclerAdapter);
}
这是我第一次使用 RecyclerAdapter
,所以我对这个概念很陌生。希望这只是菜鸟的错误!
我哪里出错了,为什么?
这是我更新的 onCreate 方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_searchbook);
bookDatabase = FirebaseDatabase.getInstance().getReference("All_Books");
searchField = (EditText) findViewById(R.id.book_Title);
search = (Button) findViewById(R.id.searchBookButton);
mResultList = (RecyclerView) findViewById(R.id.result_List);
mResultList.setHasFixedSize(true);
mResultList.setLayoutManager(new LinearLayoutManager(this));
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("All_Books");
Query query = ref.orderByChild("title").equalTo(searchField.toString());
FirebaseRecyclerOptions<Book> options =
new FirebaseRecyclerOptions.Builder<Book>()
.setQuery(query, Book.class)
.build();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Book, BookViewHolder>(options) {
@Override
public BookViewHolder 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.listview_booksearchresults, parent, false);
return new BookViewHolder(view);
}
@Override
protected void onBindViewHolder(BookViewHolder holder, int position, Book model) {
holder.setDetails(model.getTitle(), model.getAuthor(), model.getImageURL());
}
};
mResultList.setAdapter(adapter);
}
最佳答案
您使用的是最新的 Firebaseui 版本,没有 populateViewHolder
了,您需要执行以下操作:
首先,通过构建 FirebaseRecyclerOptions
配置适配器。 Book
是您的 POJO 类,然后查询将是应该在 recyclerview 中显示的数据。
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("users");
Query query=ref.orderByChild("name").equalTo(name);
FirebaseRecyclerOptions<Book> options =
new FirebaseRecyclerOptions.Builder<Book>()
.setQuery(query, Book.class)
.build();
然后创建 FirebaseRecyclerAdapter
对象:
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Book, BookViewHolder>(options) {
@Override
public BookViewHolder 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 BookViewHolder(view);
}
@Override
protected void onBindViewHolder(BookViewHolder holder, int position, Book model) {
// Bind the Book object to the BookViewHolder
// ...
}
};
更多信息在这里:
关于java - FirebaseRecyclerAdapter 强制我实现我不想要/不需要的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49616900/