The ListView set ListAdapter before ListAdapter get the value from Firebase

77 Views Asked by At
public class MyRequests extends Activity {

    private DatabaseReference mDatabaseReference;

    private FirebaseHelper mHelper;

    private ListAdapter mListAdapter=null;

    private ListView myRequestsLv;

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

        mDatabaseReference = FirebaseDatabase.getInstance().getReference();
        myRequestsLv = (ListView) findViewById(R.id.myRequestsLv);
        mHelper = new FirebaseHelper(mDatabaseReference);
        mListAdapter = new ListAdapter(MyRequests.this, mHelper.retrieve());
        myRequestsLv.setAdapter(mListAdapter);
        mListAdapter.notifyDataSetChanged();

    }

}

The above class initialise the listview and retrieve object data set from Firebase database. However, first time this activity is called,nothing show up, after switching the screens, it shows the data. I have tried put the notifyDataSetChanged() method in different places, still does not work.

public class FirebaseHelper {
    private DatabaseReference mDatabaseReference;
    private Boolean saved;
    private ArrayList<Project> projects = new ArrayList<>();
    private final FirebaseUser mUser= FirebaseAuth.getInstance().getCurrentUser();

    public FirebaseHelper(DatabaseReference db) {
        this.mDatabaseReference = db;
    }


    private void fetchData(DataSnapshot dataSnapshot) {
        projects.clear();
        if (dataSnapshot.exists()) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                Project project = ds.getValue(Project.class);
               projects.add(project);
            }
        }

    }

    public ArrayList<Project> retrieve() {
        mDatabaseReference.child("Projects").child(mUser.getUid())
                .addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot snapshot) {
                        fetchData(snapshot);
                    }

                    @Override
                    public void onCancelled(DatabaseError error) {

                    }
                });

        return projects;
    }
}

I have customised CardView item for listview within the myRequest layout.
had done lots of research,still did not figure out how to make the Listview notify the data set has changed in the first time. Thanks you in advance.

0

There are 0 best solutions below