【发布时间】:2019-05-09 15:08:52
【问题描述】:
我正在尝试使用FirestorePagingAdapter 来显示我的firestore 数据库中所有用户的列表。我使用 FirestorePagingAdapter 而不是 FirestoreRecyclerAdapter 来最小化读取次数,因为 FirestorePagingAdapter 不会读取整个文档列表,而 FirestoreRecyclerAdapter 会读取。我能够成功显示分页列表,但我需要在其上实现onClickListener,并且在单击每个项目时,我需要打开另一个活动,该活动显示被单击的特定用户的详细描述。为此,我需要将点击用户的 documentId 传递给下一个活动。
但不幸的是,FirestorePagingAdapter 没有 getSnapshots() 方法,因此我使用 getSnapshots().getSnapshot(position).getId()。
另一方面,FirestoreRecyclerAdapter 有这个方法,这使得获取文档 id 变得非常简单。像这样:How to get document id or name in Android in Firestore db for passing on to another activity?
// 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);
}
});
}
};
【问题讨论】:
-
或者您可以跳过使用 FirestorePagingAdapter 并自己将查询结果绑定到 RecyclerView。推荐的现代应用架构使用带有 Firebase SDK 的 Android Jetpack,如本仓库所示。 github.com/CodingDoug/firebase-jetpack
标签: java android firebase google-cloud-firestore android-paging