'FirebaseRecycler Adapter overlapping the data in activity

I've been trying on a project where the data is checked for conditions and then the satified data is to be loaded to recyclerView with firebaserecycler adapter but apparently it looks like the latest is being placed on the top of the older data. I need them in la list view from top to bottom.

Here is my code :

Activity code

public class TfacultyActivity extends AppCompatActivity {
    private FirebaseAuth mauth;
    private DatabaseReference userref, useref;
    private List<String> classes, subjects, tokens;
    private String day;
    private int a=0;
    private RecyclerView rc;
    private FirebaseRecyclerOptions<Leaves> options;
    private FirebaseRecyclerAdapter<Leaves, TfacultyActivity.ListHolder> adapter;


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tfaculty);
        initialize();
        Log.d("Checkday", day);
        Log.d("CheckAc", "Tfaculty");

        useref.child("Users").child(mauth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(snapshot.exists()) {
                    if(snapshot.hasChild("Incharge to")) {
                        classes.add(snapshot.child("Incharge to").getValue().toString());
                        subjects.add(snapshot.child("In-sub").getValue().toString());
                    }
                    if(snapshot.hasChild("Otherc")) {
                        String[] clss = snapshot.child("Otherc").getValue().toString().split(",");
                        String[] subs = snapshot.child("Others").getValue().toString().split(",");
                        for(int i=0; i<clss.length; i++) {
                            classes.add(clss[i]);
                            subjects.add(subs[i]);
                        }
                        Log.d("Check222", classes.toString());
                        Log.d("Check333", subjects.toString());
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });


    options = new FirebaseRecyclerOptions.Builder<Leaves>().setQuery(userref,Leaves.class).build();

    adapter =
            new FirebaseRecyclerAdapter<Leaves, TfacultyActivity.ListHolder>(options) {

                @Override
                protected void onBindViewHolder(@NonNull TfacultyActivity.ListHolder listHolder, int i, @NonNull Leaves permissions) {
                    final String croom = getRef(i).getKey();
                    Log.d("Checkclass", croom);
                    userref.child(croom).child("Changed").addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                            if(snapshot.hasChildren() && classes.contains(croom)) {
                                        if(snapshot.hasChildren()) {
                                            Log.d("Ckecksnap1", snapshot.toString());
                                            for(DataSnapshot data : snapshot.child(day).getChildren()) {
                                                Log.d("Checksub,day",data.toString());
                                                if(subjects.contains(data.getValue().toString())) {
                                                    Log.d("Checktim", data.getKey());
                                                    listHolder.tname2.setText(croom);
                                                    listHolder.clt1.setText(data.getKey());
                                                    listHolder.cls1.setText(data.getValue().toString());
                                                    useref.child("Classes").child(croom).child("Faculty")
                                                            .addValueEventListener(new ValueEventListener() {
                                                                @Override
                                                                public void onDataChange(@NonNull DataSnapshot snapshot1) {
                                                                    if(snapshot1.exists()) {
                                                                        if(snapshot1.hasChildren()) {
                                                                            for(DataSnapshot data1 : snapshot1.getChildren()) {
                                                                                if(data1.hasChild("Token_ID")) {
                                                                                    tokens.add(data1.child("Token_ID").getValue().toString());
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }

                                                                @Override
                                                                public void onCancelled(@NonNull DatabaseError error) {

                                                                }
                                                            });
                                                    listHolder.itemView.setOnClickListener(new View.OnClickListener() {
                                                        @Override
                                                        public void onClick(View view) {
                                                            useref.child("TimeTables").child(croom).child("Changed").child(day).child(data.getKey().toString()).setValue("Substitute")
                                                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                        @Override
                                                                        public void onComplete(@NonNull Task<Void> task) {
                                                                            if(task.isSuccessful()) {
                                                                                for(String b : tokens) {
                                                                                    FirebaseNotificationSender fns = new FirebaseNotificationSender(b, "Substitute class Available","A class in "+classes.get(a)+" is available today at " + data.getKey().toString(),getApplicationContext(),TfacultyActivity.this);
                                                                                    fns.SendNotifications();
                                                                                }
                                                                            }
                                                                        }
                                                                    })
                                                                    .addOnFailureListener(new OnFailureListener() {
                                                                        @Override
                                                                        public void onFailure(@NonNull Exception e) {

                                                                        }
                                                                    });
                                                        }
                                                    });
                                                }
                                            }
                                        }
                            } else {
                                listHolder.itemView.setVisibility(View.GONE);
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError error) {

                        }
                    });
                }

                @NonNull
                @Override
                public TfacultyActivity.ListHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sclass,parent,false);
                    return new TfacultyActivity.ListHolder(view);
                }


            };
        rc.setAdapter(adapter);

    }

    private void initialize() {
        mauth = FirebaseAuth.getInstance();
        userref = FirebaseDatabase.getInstance().getReference("TimeTables");
        useref = FirebaseDatabase.getInstance().getReference();
        classes = new ArrayList<>();
        subjects = new ArrayList<>();
        tokens = new ArrayList<>();
        rc = (RecyclerView) findViewById(R.id.rec2);
        rc.setLayoutManager(new LinearLayoutManager(this));
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            if(LocalDate.now().getDayOfWeek().name().equals("MONDAY")) day = "Monday";
            else if(LocalDate.now().getDayOfWeek().name().equals("TUESDAY")) day = "Tuesday";
            else if(LocalDate.now().getDayOfWeek().name().equals("WEDNESDAY")) day = "Wednesday";
            else if(LocalDate.now().getDayOfWeek().name().equals("THURSDAY")) day = "Thursday";
            else if(LocalDate.now().getDayOfWeek().name().equals("FRIDAY")) day = "Friday";
            else if(LocalDate.now().getDayOfWeek().name().equals("SATURDAY")) day = "Saturday";
            else if(LocalDate.now().getDayOfWeek().name().equals("SUNDAY")) day = "Sunday";
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(adapter != null) {
            adapter.stopListening();
        }
    }

    public static class ListHolder extends RecyclerView.ViewHolder {

        TextView tname2, clt1,cls1;

        public ListHolder (@NonNull View itemView) {
            super(itemView);
            tname2 = itemView.findViewById(R.id.tname2);
            clt1  = itemView.findViewById(R.id.clt1);
            cls1 = itemView.findViewById(R.id.cls1);
        }
    }

Here is database refernce for understanding : firebasedatabase

I tried a lot but unable to identify the flaw. Someone please help me with this.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source