【问题标题】:Getting Data from firebase and binding to recycler view从 firebase 获取数据并绑定到回收站视图
【发布时间】:2020-07-02 14:52:22
【问题描述】:

我首先使用这个版本的数据库:实现 'com.firebaseui:firebase-ui-database:6.2.1' 我正在尝试此代码并在粗体语句处出错,错误是:预期 1 个参数,但找到 4 个。 代码是: 私有 void loadMenu() {

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

已编辑: 私有 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) {

}

}

【问题讨论】:

    标签: firebase android-studio firebase-realtime-database


    【解决方案1】:

    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() cannot be applied to FirebaseRecyclerAdapter

    【讨论】:

    • 感谢这个工作,但它不让我去 setIemClickListener
    • 您的视图持有者类是否扩展了视图持有者?
    • 是的,它正在显示视图,但是当我继续 viewholder.setItemClickListener 时,它给出了错误。知道我有接口 setItemClickListener 代码: public interface ItemClickListener { void onClick(View view,int position,boolean isLongClick); }
    • 你能发布你的 MenuViewHolder.java 吗?
    • 公共类 MenuViewHolder 扩展 RecyclerView.ViewHolder 实现 View.OnClickListener { public TextView txtMenuName;公共图像视图图像视图;私有项目点击侦听器项目点击侦听器; 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) { } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多