首页 > 解决方案 > 从 firebase 获取数据并绑定到回收站视图

问题描述

首先我使用这个版本的数据库:实现 'com.firebaseui:firebase-ui-database:6.2.1' 我尝试这段代码并在粗体语句处出错 错误是:Expected 1 arguments but found 4. code is : private void加载菜单(){

    FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter=new FirebaseRecyclerAdapter<Category, MenuViewHolder>**(Category.class,R.layout.menu_item,MenuViewHolder.class,category)** {
        @Override
        protected void onBindViewHolder(@NonNull MenuViewHolder holder, int position, @NonNull Category model) {


        }

        @NonNull
        @Override
        public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return null;
        }
    }}

编辑一: private void loadMenu() {

        FirebaseRecyclerOptions<Category> options=new FirebaseRecyclerOptions.Builder<Category>()
                .setQuery(category,Category.class)
                .build();

    FirebaseRecyclerAdapter adapter= new FirebaseRecyclerAdapter<Category, MenuViewHolder>(options) {
        @NonNull
        @Override
        public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View itemView= LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.menu_item,parent,false);
            return   new MenuViewHolder(itemView);
        }

        @Override
        protected void onBindViewHolder(@NonNull MenuViewHolder viewHolder, int position, @NonNull Category model) {
            viewHolder.txtMenuName.setText(model.getName());
            Picasso.with(getBaseContext()).load(model.getImage())
                    .into(viewHolder.imageView);
            final Category clickItem=model;
            viewHolder.setItemClickListener...

            }


        }
    };
}

公共类 MenuViewHolder 扩展 RecyclerView.ViewHolder 实现 View.OnClickListener {

public TextView txtMenuName;
public ImageView imageView;
private ItemClickListener itemClickListener;

public MenuViewHolder(@NonNull View itemView) {
    super(itemView);

    txtMenuName=(TextView)itemView.findViewById(R.id.menu_name);
    imageView= (ImageView)itemView.findViewById(R.id.menu_image);

}

@Override
public void onClick(View view) {

}

}

标签: firebaseandroid-studiofirebase-realtime-database

解决方案


FirebaseUI 的最新版本 (3.x) 实现了与以前版本不同的初始化 FirebaseRecyclerAdapter 的方法。从使用 FirebaseRecyclerAdapter 文档:

首先,通过构建 FirebaseRecyclerOptions 来配置适配器。在这种情况下,我们将继续我们的聊天示例:

 FirebaseRecyclerOptions<Chat> options =
                new FirebaseRecyclerOptions.Builder<Chat>()
                        .setQuery(query, Chat.class)
                        .build();

接下来创建 FirebaseRecyclerAdapter 对象。您应该已经有一个 ViewHolder 子类来显示每个项目。

因此,对于您的示例,您需要执行以下操作:

FirebaseRecyclerOptions<image_details> options =
        new FirebaseRecyclerOptions.Builder<image_details>()
                .setQuery(myRef, image_details.class)
                .build();

FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(options) {
    @Override
    public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.individual_row, parent, false);

        return new BlogViewHolder(view);
    }

    @Override
    protected void onBindViewHolder(BlogViewHolder holder, int position, image_details model) {
        // Bind the image_details object to the BlogViewHolder
        // ...
    }
};

最后,FirebaseRecyclerAdapter 使用事件侦听器来监控 Firebase 查询的更改。要开始侦听数据,请调用 adapter.startListening() 和 adapter.stopListening() 以停止侦听器。建议分别在 onStart() 和 onStop() 中调用它们。FirebaseRecyclerAdapter 生命周期文档中提供了有关这方面的更多详细信息。取自:firebaserecycleradapter() 不能应用于 FirebaseRecyclerAdapter


推荐阅读