'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 |
|---|
