java - FirebaseRecyclerAdapter 强制我实现我不想要/不需要的方法

标签 java android firebase firebase-realtime-database firebaseui

我正在学习不到 3 个月前的教程,所以我认为它不会过时。我在我的 Android 项目中使用了 FirebaseRecyclerAdapter。目前我正在尝试搜索存储在我的 Firebase 中的书籍并返回匹配的书籍,在我的 searchBook 方法中我使用的是 FirebaseRecyclerAdapter。然而,当我声明我的 FirebaseRecyclerAdapter = new Firebas... 时,我被迫实现两种方法,onBindviewHolderonCreateViewHolder。我认为我不需要这些,或者如果我需要,有人可以向我解释为什么我需要吗?

目前这是我的代码:

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
    // ...
  }
};

更多信息在这里:

https://github.com/firebase/FirebaseUI-Android/tree/master/database#using-firebaseui-to-populate-a-recyclerview

关于java - FirebaseRecyclerAdapter 强制我实现我不想要/不需要的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49616900/

相关文章:

java - 重新启动 Java 控制台应用程序

java - 如果我在项目中使用的库已停止使用,会发生什么情况,我的应用程序会崩溃吗?

javascript - JS/Jquery 和 firebase 登录页面问题

android - 仅使用 ServerValue.TIMESTAMP 从 firebase 服务器获取时间和日期

java - 使用多个 Spring Boot 和 JDBC 数据源

java - 无效输入异常

Android 套接字不会通过 .connect() 函数连接,只有 new Socket()

安卓屏幕方向 : lock only parts of the layout

javascript - Firebase 的云函数错误 : getaddrinfo ENOTFOUND

java - 如何确保 java8 流中的处理顺序?