ListView在ListAdapter之前设置ListAdapter从Firebase获取值

时间:2017-08-30 19:21:06

标签: android firebase asynchronous synchronization data-retrieval

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();

    }

}

上面的类初始化listview并从Firebase数据库中检索对象数据集。但是,第一次调用此活动时,在切换屏幕后没有显示任何内容,它会显示数据。我尝试将notifyDataSetChanged()方法放在不同的地方,但仍无法正常工作。

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;
    }
}

我在myRequest布局中为listview定制了CardView项目 已经做了很多研究,仍然没有弄清楚如何使Listview通知数据集在第一时间发生了变化。提前谢谢你。

0 个答案:

没有答案