【问题标题】:Loading Text and Image from FireBase Database to a View Holder将文本和图像从 FireBase 数据库加载到视图持有者
【发布时间】:2022-01-13 22:45:49
【问题描述】:

需要从 FireBase 数据库中获取文本和图像并使用 FireBase RecyclerAdapter 查看它们,但问题是:

  • FirebaseRecyclerAdapter<Category, MenuViewHolder>下面有一条红线表示

类“从 FirebaseRecyclerAdapter 派生的匿名类”必须声明为抽象或在“FirebaseRecyclerAdapter”中实现抽象方法“onBindViewHolder(VH, int, T)”

  • populateViewHolder 我是手动写的 我觉得这个方法已经贬值了。

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

非常感谢

【问题讨论】:

    标签: java android firebase-realtime-database firebaseui


    【解决方案1】:

    您应该覆盖onBindViewHolder,以便它可以调用populateViewHolder。 试试这样的:

     @Override
    public void onBindViewHolder(VH viewHolder, int position) {
        Category model = getItem(position);
        populateViewHolder(viewHolder, model, position);
    }
    

    另外,我认为在onCreateViewHolder 中,您应该扩充您的项目布局并返回一个新的 ViewHolder。

    【讨论】:

      【解决方案2】:

      要使用 FirebaseUI 中的适配器,您需要覆盖它们并同时实现 onCreateViewHolderonBindViewHolder。不过,不需要populateViewHolder 方法。

      来自Using the FirebaseRecyclerAdapter 上的 FirebaseUI 文档中的这个最小示例:

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

      您现在在populateViewHolder 中拥有的大部分代码在使用 FirebaseUI 时最终会在 onBindViewHolder 中。

      【讨论】:

        猜你喜欢
        • 2019-09-22
        • 1970-01-01
        • 2019-05-25
        • 2018-05-02
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多