我建议您使用 RecyclerView 而不是列表,Android 创建了 RecyclerView 作为 ListView 的改进,所以是的,您可以使用 ListView 控件创建附加列表,但是使用 RecyclerView 更容易更好。您可以在这篇文章中阅读更多内容:RecyclerView vs ListView
另外,您可以使用FirebaseRecyclerAdapter 为您的列表恢复适配器,这将为您填充列表并检索您想要的所有数据完成所有工作(我通常在我的代码中用户自定义对象等于我的 firebase 数据库的值,通过这种方式,您可以在 FirebaseRecyclerAdapter 中使用它们来改进数据检索)
例如,这里我使用 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
}
});
}
而且,如您所见,我的 User 对象非常简单(对象变量的名称必须等于您的 firebase 项,对于子级别,您可以在对象中使用 Hashmaps):
public class User {
private String display_name;
private String email;
private String photo_url;
//[...] get/set methods and constructors
最后,这是我的 viewHolder 用户类:
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();
}
}
如有任何疑问,请随时提出!希望对你有帮助!