Anstatt eine Liste ich schlage vor, Sie RecyclerView zu verwenden, Android erstellt RecyclerView als ListView-Verbesserung, also ja, Sie können eine angehängte Liste mit ListView-Steuerelement erstellen, aber RecyclerView ist einfacher und besser. Mehr erfahren Sie in diesem Beitrag lesen: RecyclerView vs ListView
Sie können aber auch einfach den Adapter für Ihre Liste wiederherstellen eine FirebaseRecyclerAdapter
verwenden, die für die Liste die ganze Arbeit tun bevölkern und Sie alle Daten abrufen, die Sie wollen (ich in der Regel Benutzer benutzerdefinierte Objekte in meinem Code, die die Werte meiner Firebase-Datenbank entsprechen, auf diese Weise können Sie sie in Ihrem FirebaseRecyclerAdapter verwenden, um die Daten wiederherzustellen)
Zum Beispiel, hier füllen ich eine Listview von Benutzern mit einem Profilbild mit einem FirebaseRecyclerAdapter:
private void initializeRecyclerAdapter() {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
mRecyclerUsersView.setLayoutManager(linearLayoutManager);
Query allPostsQuery = FirebaseUtil.getUsersRef();
mAdapter = getFirebaseRecyclerAdapter(allPostsQuery);
mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
// TODO: Refresh feed view.
}
});
mRecyclerUsersView.setAdapter(mAdapter);
}
private FirebaseRecyclerAdapter<User, UserListViewHolder> getFirebaseRecyclerAdapter(Query query) {
return new FirebaseRecyclerAdapter<User, UserListViewHolder>(
User.class, R.layout.user_row_item, UserListViewHolder.class, query) {
@Override
protected void populateViewHolder(UserListViewHolder viewHolder, User user, int position) {
setupUser(viewHolder, user, position, null);
}
};
}
private void setupUser(final UserListViewHolder UserViewHolder, final User user, final int position, final String inPostKey) {
//Set the items for every new view
UserViewHolder.setIcon(user.getPhoto_url());
UserViewHolder.setText(user.getEmail());
final String postKey;
if (mAdapter instanceof FirebaseRecyclerAdapter) {
postKey = ((FirebaseRecyclerAdapter) mAdapter).getRef(position).getKey();
} else {
postKey = inPostKey;
}
FirebaseUtil.getUsersRef().child(postKey).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
//Add users to the newGroup item
UserViewHolder.setPostClickListener(new UserListViewHolder.UserClickListener() {
@Override
public void onUserClick() {
// mNewGroup.addUserToGroup(dataSnapshot.getKey());
mNewGroupUsers.addUserToGroup(dataSnapshot.getKey());
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
//TODO ControlOnCancelled
}
});
}
Und, wie Sie sehen können, mein User-Objekt so einfach ist (die Namen der Objektvariablen müssen Ihre Feuerbasis Elemente gleich, für Unterebenen Sie HashMaps in Ihrem Objekt verwenden können):
public class User {
private String display_name;
private String email;
private String photo_url;
//[...] get/set methods and constructors
Schließlich ist hier mein viewHolder Benutzerklasse :
public class UserListViewHolder extends RecyclerView.ViewHolder {
private final View mView;
private static final int POST_TEXT_MAX_LINES = 6;
private ImageView mIconView;
private TextView mAuthorView;
private UserClickListener mListener;
public UserListViewHolder(View itemView) {
super(itemView);
mView = itemView;
mIconView = (ImageView) mView.findViewById(R.id.user_image_profile);
mAuthorView = (TextView) mView.findViewById(R.id.user_text_profile);
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onUserClick();
}
});
}
public void setIcon(String url) {
GlideUtil.loadProfileIcon(url, mIconView);
}
public void setPostClickListener(UserClickListener listener) {
mListener = listener;
}
public void setText(final String text) {
if (text == null || text.isEmpty()) {
mAuthorView.setVisibility(View.GONE);
return;
} else {
mAuthorView.setVisibility(View.VISIBLE);
mAuthorView.setText(text);
mAuthorView.setMaxLines(POST_TEXT_MAX_LINES);
}
}
public interface UserClickListener {
void onUserClick();
}
}
Fühlen Sie sich frei, irgendwelche Zweifel zu stellen! hoffe, dass es dir hilft!
Sie haben ein Bild des JSON-Baums in Ihre Frage eingefügt. Bitte ersetzen Sie dies durch den tatsächlichen JSON als Text, den Sie einfach erhalten, indem Sie in der Firebase-Datenbankkonsole auf die Schaltfläche "Exportieren" klicken. Da der JSON als Text durchsuchbar ist, können wir ihn einfach verwenden, um mit Ihren tatsächlichen Daten zu testen und sie in unserer Antwort zu verwenden, und im Allgemeinen ist dies nur eine gute Sache. –