【问题标题】:Firebase recycler adapter not showing dataFirebase 回收器适配器不显示数据
【发布时间】:2017-12-21 09:41:09
【问题描述】:

我习惯于将populateViewHolder 与firebase 回收器适配器一起使用,但onBindViewHolder 是根据this post 执行此操作的新方法。我试过onBindViewHolder,但它没有显示任何东西。 我做错了什么?

这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_users);

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
    mUsersList = (RecyclerView) findViewById(R.id.usersList);
    mUsersList.setHasFixedSize(true);
    mUsersList.setLayoutManager(new LinearLayoutManager(this));}


 @Override
protected void onStart() {
    super.onStart();
 FirebaseRecyclerOptions<Users> options =
          new FirebaseRecyclerOptions.Builder<Users>()
                  .setQuery(mDatabase, Users.class)
                  .build();

  FirebaseRecyclerAdapter<Users, UsersViewHolder> adapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(options) {

      @Override
      public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

          View view = LayoutInflater.from(parent.getContext())
                  .inflate(R.layout.users_single_layout, parent, false);
          return new UsersViewHolder(view);
      }

      @Override
      protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Users model) {
            holder.setName(model.getName());
      }

  };
  mUsersList.setAdapter(adapter);

}

public static class UsersViewHolder extends RecyclerView.ViewHolder {

   View mView;
    public UsersViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setName(String name){

        TextView userNames = (TextView) mView.findViewById(R.id.textView2);
        userNames.setText(name);
    }
}}

我的模型类的代码。

public class Users {

public String name;
public String image;
public String status;

public Users(){


}

public Users(String name, String image, String status) {
    this.name = name;
    this.image = image;
    this.status = status;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}}

我的自定义布局

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">


    <de.hdodenhof.circleimageview.CircleImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/common_google_signin_btn_icon_dark_focused"
        android:id="@+id/circleImageView2" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="89dp"
        android:layout_marginStart="89dp"
        android:layout_toEndOf="@+id/circleImageView2"
        android:layout_toRightOf="@+id/circleImageView2"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/circleImageView2"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignStart="@+id/textView2"
        android:text="TextView" />
</RelativeLayout>

【问题讨论】:

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


【解决方案1】:

我可以在 firebase 中查看您的表 Users 吗?添加 onCreateViewHolderonBindViewHolder 日志,看看他们是否调用了。

【讨论】:

  • 我尝试了记录,但没有调用它们。这是我在 firebase 中的用户的Link
  • @CodeNemesis 这也发生在我身上,有什么解决办法吗?
  • @ArmandoBarreda 我坚持了 3 天没有任何解决方案,所以我做了一些我并不自豪的事情,我降级了所有依赖项以匹配我的工作项目,然后升级了所有依赖项,除了firebase 用户界面数据库。这启用了 populateViewHolder Override 选项,我完成了它。
  • @CodeNemesis 你能把项目发给我吗?
  • @ArmandoBarreda 抱歉,这是不可能的,但here 你可以看到我的依赖项。更改依赖后唯一改变的是使用populateViewHolder而不是onCreate和onBinder,所以你可以参考上面的代码。
【解决方案2】:

确保您在 firebase 项目中设置了读取规则。将读取设置为 true。

检查firebase项目中的规则:

【讨论】:

    【解决方案3】:

    您可以添加:

     adapter.startListening();
    

    之后:

    mUsersList.setAdapter(adapter);
    

    它应该看起来像:

    mUsersList.setAdapter(adapter);
    
    adapter.startListening();
    

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      相关资源
      最近更新 更多