Я пытаюсь использовать FirestorePagingAdapter
для отображения списка всех пользователей в моей базе данных firestore.Я использую FirestorePagingAdapter
вместо FirestoreRecyclerAdapter, чтобы минимизировать количество операций чтения, так как F irestorePagingAdapter
не читает весь список документов, в то время как FirestoreRecyclerAdapter
делает.Я могу успешно отобразить разбитый на страницы список, но мне нужно внедрить onClickListener
в него, и по щелчку каждого элемента мне нужно открыть другое действие, которое показывает подробное описание конкретного пользователя, на которого был выполнен щелчок.Для этого мне нужно передать documentId выбранного пользователя следующему действию.
Но, к сожалению, FirestorePagingAdapter не имеет метода getSnapshots (), поэтому я использую getSnapshots (). GetSnapshot (position) .getId ().
С другой стороны, FirestoreRecyclerAdapter имеет этот метод, который делает выборку идентификатора документа очень простой задачей.Примерно так: Как получить идентификатор документа или имя в Android в Firestore db для перехода к другому виду деятельности?
// 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);
}
});
}
};