Android Firebase RecyclerView清单

时间:2018-04-22 00:47:23

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

我的RecyclerView有问题。总之,我将RecyclerView连接到我的数据库。然后,当我开始活动时,列表为空,但如果我返回到上一个活动并重新打开此活动,则列表将被填充。

以下是代码:

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

    mAuth = FirebaseAuth.getInstance();
    if(mAuth == null){
        startActivity(new Intent(FollowersActivity.this, HomeScreenActivity.class));
        finishAffinity();
    }

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Seguidores");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Usuarios");
    requestDB = FirebaseDatabase.getInstance().getReference().child("requesting");

    requestList = findViewById(R.id.requestList);
    requestList.setHasFixedSize(true);
    requestList.setLayoutManager(new LinearLayoutManager(this));
}

@Override
protected void onStart() {
    super.onStart();

    FirebaseRecyclerAdapter<Users, requestViewHolder> requestAdapter = new FirebaseRecyclerAdapter<Users, requestViewHolder>(

            Users.class,
            R.layout.users_row_layout,
            requestViewHolder.class,
            requestDB.child(mAuth.getCurrentUser().getUid())

    ) {
        @Override
        protected void populateViewHolder(final requestViewHolder viewHolder, Users model, int position) {
            final String other_userId = getRef(position).getKey();

            mDatabase.child(other_userId).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    String name = dataSnapshot.child("nombre").getValue().toString();
                    String username = dataSnapshot.child("usuario").getValue().toString().substring(1);
                    String fotoPath = dataSnapshot.child("foto").getValue().toString();

                    viewHolder.nameTextView.setText(name);
                    viewHolder.usernameTextView.setText(username);
                    Glide.with(getApplicationContext()).load(fotoPath).into(viewHolder.imageView);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
        }
    };

    requestList.setAdapter(requestAdapter);
}

public static class requestViewHolder extends RecyclerView.ViewHolder {

    View mView;
    CircleImageView imageView;
    TextView nameTextView, usernameTextView;

    public requestViewHolder (View itemView){
        super(itemView);
        mView = itemView;

        imageView = itemView.findViewById(R.id.circleImageView);
        nameTextView = itemView.findViewById(R.id.nameTextView);
        usernameTextView = itemView.findViewById(R.id.usernameTextView);
    }
}

然后我意识到问题出在数据库上,因为如果我更改了根目录,那么列表就会在第一时间填充。

1 个答案:

答案 0 :(得分:0)

您需要从代码中删除requestList.setHasFixedSize(true);

如果您的setHasFixedSize项目在运行时不会改变其高度,您可以考虑使用RecyclerView。它有一些额外的好处,如优化视图的整个回收。但是,您无法使用它来加载动态RecyclerView

有关更好的理解,请参阅documentation here