【问题标题】:Can't make viewholder final after firebase UI updatefirebase UI更新后无法使viewholder最终
【发布时间】:2018-08-02 20:54:55
【问题描述】:

我将我的 com.firebaseui:firebase-ui-database 包从 1.1.1 更新到了 3.3.1。看来我不能再在FirebaseRecyclerAdapter 中使用populateViewHolder。相反,我应该使用onBindViewHolder。我认为这很好,但是当我从内部类(另一个数据库 Ref)中调用 viewholder 时,我需要将 viewholder 设置为 final,此时适配器会给出以下错误:

代码

addedFriendsRecycleViewAdapter = new FirebaseRecyclerAdapter<Boolean, SingleImageViewHolder>(
      Boolean.class,
      R.layout.adduser_single_round_pictrure_layout,
      SingleImageViewHolder.class,
      mMembersDatabase
) {
      @Override
      public SingleImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          return null;
      }

      @Override
      protected void onBindViewHolder(@NonNull final SingleImageViewHolder holder, int position, @NonNull Boolean model) {
          final String added_list_user_id = getRef(position).getKey();

          mUsersDatabase.child(added_list_user_id).addValueEventListener(new ValueEventListener() {
              @Override
              public void onDataChange(DataSnapshot dataSnapshot) {

                  String userThumb = dataSnapshot.child("thumb_image").getValue().toString();

                  holder.setImage(userThumb, AddUserActivity.this);

              }

              @Override
              public void onCancelled(DatabaseError databaseError) {

              }
          });
      }
  };

【问题讨论】:

    标签: java android firebase firebase-realtime-database firebaseui


    【解决方案1】:

    3.0+版本需要使用FirebaseRecyclerOptions

    首先,通过构建 FirebaseRecyclerOptions 来配置适配器:

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

    接下来创建 FirebaseRecyclerAdapter 对象:

    FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<POJO, SingleImageViewHolder>(options) {
    @Override
    public SingleImageViewHolder 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 SingleImageViewHolder(view);
    }
    
    @Override
    protected void onBindViewHolder(SingleImageViewHolder holder, int position, POJO model) {
        // Bind the Chat object to the ChatHolder
        // ...
       }
    };
    

    这里有更多细节:

    https://github.com/firebase/FirebaseUI-Android/tree/master/database

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2018-02-14
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      相关资源
      最近更新 更多