I'm facing a problem when I add values in firebase and tried to read and view these valued in tableRow using textView, but I get repeated values and when I navigate between fragments and come back to this fragment the repeated values disappear, how can I solve this problem? how can I view these values without the repeated values?
this is the code
public class RoomFragment extends Fragment {
TableLayout stk;
TableRow tbrow0;
Context thiscontext;
Button addNewRoom;
ArrayList<Rooms> rooms;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
thiscontext = container.getContext();
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_room,
container, false);
addNewRoom = (Button) rootView.findViewById(R.id.addNewRoom);
rooms = new ArrayList<Rooms>();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Add Room
addNewRoom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateDetail();
}
});
return rootView;
}
public void updateDetail() {
Intent intent = new Intent(getActivity(), add_room.class);
startActivity(intent);
}
@Override
//
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
addTable();
}
// This event is triggered soon after onCreateView().
// Any view setup should occur here. E.g., view lookups and attaching view listeners.
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// Setup any handles to view objects here
// EditText etFoo = (EditText) view.findViewById(R.id.etFoo);
stk=(TableLayout)view.findViewById(R.id.table_main);//table layout
}
public void addTable(){
// fetch reference database
DatabaseReference mDbRef = FirebaseDatabase.getInstance().getReference().child("Rooms");
// Read from the database
mDbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()){
// Storing DB values in class
Rooms room = ds.getValue(Rooms.class);
rooms.add(room);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Display Room numbers
String RNum = ds.child("number").getValue().toString();
TableRow tbrow=new TableRow(thiscontext);// row
TextView t2v=new TextView(thiscontext);
t2v.setText(RNum);
t2v.setPadding(0,0,30,10);
t2v.setTextColor(Color.parseColor("#2171C1"));
t2v.setGravity(Gravity.LEFT);
t2v.setTextSize(20);
tbrow.addView(t2v);
TextView t3v=new TextView(thiscontext);
t3v.setText(" ");
t3v.setPadding(30,0,30,10);
tbrow.addView(t3v);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Modify a Room
ImageView editimg = new ImageView(thiscontext);
editimg.setBackgroundResource(R.drawable.ic_edit);
editimg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//**Send Room number
Intent intent = new Intent(getActivity(), modify_room.class);
String No = ds.getKey();
intent.putExtra("No", No );
intent.putExtra("number", room.getNumber() );
intent.putExtra("employee", room.getEmployee());
intent.putExtra("status", room.getStatus());
// intent.putExtra("department", room.getDepartment());
// intent.putExtra("type", room.getType());
startActivity(intent);
}
});
tbrow.addView(editimg);
TextView t4v=new TextView(thiscontext);
t4v.setText(" ");
t4v.setPadding(30,0,30,10);
tbrow.addView(t4v);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Delete a Room
ImageView deleteimg = new ImageView(thiscontext);
deleteimg.setBackgroundResource(R.drawable.ic_delete);
deleteimg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// DatabaseReference ref =ds.getRef();
// ref.removeValue();
ds.getRef().removeValue();
stk.removeView(tbrow);
Toast.makeText(getContext(),"The Room has been deleted successfully from the system",Toast.LENGTH_LONG).show();
}
});
tbrow.addView(deleteimg);
stk.addView(tbrow);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
//Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
}
You can just clear the list of rooms
for each call of onDataChange()
to guarantee non-duplicate values.
mDbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
rooms.clear(); // Clearing the list
for (DataSnapshot ds : dataSnapshot.getChildren()){
// Storing DB values in class
Rooms room = ds.getValue(Rooms.class);
rooms.add(room);
// rest of code
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.