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通知数据集在第一时间发生了变化。提前谢谢你。