我正在尝试使用FirestorePagingAdapter
来显示我的Firestore数据库中所有用户的列表。我正在使用FirestorePagingAdapter
FirestoreRecyclerAdapter代替FirestoreRecyclerAdapter来最大程度地减少读取次数,因为F irestorePagingAdapter
不会同时读取整个文档列表FirestoreRecyclerAdapter
。我能够成功显示分页列表,但是我需要对其进行实现onClickListener
,并且在单击每个项目时,我需要打开另一个活动,该活动显示了所单击的特定用户的详细说明。为此,我需要将被点击用户的documentId传递给下一个活动。
但是不幸的是,FirestorePagingAdapter没有getSnapshots()方法,因此我使用getSnapshots()。getSnapshot(position).getId()。
另一方面,FirestoreRecyclerAdapter具有此方法,这使获取文档ID变得非常容易。这样的事情:如何在Firestore db中获取Android中的文档ID或名称以传递到另一个活动?
// Query to fetch documents from user collection ordered by name
Query query = FirebaseFirestore.getInstance().collection("users")
.orderBy("name");
// Setting the pagination configuration
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPrefetchDistance(10)
.setPageSize(20)
.build();
FirestorePagingOptions<User> firestorePagingOptions = new FirestorePagingOptions.Builder<User>()
.setLifecycleOwner(this)
.setQuery(query, config, User.class)
.build();
firestorePagingAdapter =
new FirestorePagingAdapter<User, UserViewHolder>(firestorePagingOptions){
@NonNull
@Override
public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.single_user_layout, parent, false);
return new UserViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull UserViewHolder holder, int position, @NonNull User user) {
holder.setUserName(user.name);
holder.setStatus(user.status);
holder.setThumbImage(user.thumb_image, UsersActivity.this);
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent userProfileIntent = new Intent(UsersActivity.this, UserProfileActivity.class);
// Need to fetch the user_id to pass it as intent extra
// String user_id = getSnapshots().getSnapshot(position).getId();
// userProfileIntent.putExtra("user_id", user_id);
startActivity(userProfileIntent);
}
});
}
};
我能够通过使用SnapshotParser
in setQuery
方法来做到这一点。通过此操作,我能够修改从Firestore获得的对象。该documentSnapshot.getId()
方法返回文档ID。
FirestorePagingOptions<User> firestorePagingOptions = new FirestorePagingOptions.Builder<User>()
.setLifecycleOwner(this)
.setQuery(query, config, new SnapshotParser<User>() {
@NonNull
@Override
public User parseSnapshot(@NonNull DocumentSnapshot snapshot) {
User user = snapshot.toObject(User.class);
user.userId = snapshot.getId();
return user;
}
})
.build();
在User类中,我刚刚在User类中添加了另一个字段“ String userId”。我的Firestore文档中不存在userId字段。onClickListener
然后,在中,我可以直接用于user.userId
获取文档ID并将其发送到其他活动。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句