У меня относительно простая настройка просмотра переработчика.В моем фрагменте я запрашиваю пожарный магазин, чтобы получить некоторые предварительно выбранные значения, введенные пользователем.Одним из этих значений на самом деле является идентификатор коллекции в другой коллекции в том же экземпляре Firebase, который ссылается на название ресторана.Я не хочу показывать идентификатор, а скорее название ресторана, к которому относится идентификатор.
Теперь в методе viewholder я запрашиваю эту другую коллекцию, чтобы получить название ресторана.
Вотчасть моего первоначального запроса:
mealplanDetailsArrayList = new ArrayList<>();
mealplanReference = firebaseFirestore.collection("Customer_Data").document(userId).collection("Meal_Plans");
mealplanReference.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot document : queryDocumentSnapshots) {
MealplanDetails mealplanDetails = document.toObject(MealplanDetails.class);
mealplanDetailsArrayList.add(mealplanDetails);
mealPlanDetailsAdapter = new MealPlanDetailsAdapter(mealplanContext, mealplanDetailsArrayList);
mealplanRecycler.setAdapter(mealPlanDetailsAdapter);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "on failure error:"+e);
}
});
А вот мой адаптер:
public class MealPlanDetailsAdapter extends RecyclerView.Adapter<MealPlanDetailsAdapter.MealPlanDetailsViewHolder> {
private Context adapterContext;
private ArrayList<MealplanDetails> mealplanDetailsArrayList;
private String restaurantName;
private final static String TAG = MealPlanDetailsAdapter.class.getSimpleName();
public MealPlanDetailsAdapter(Context adapterContext, ArrayList<MealplanDetails> mealplanDetailsArrayList) {
this.mealplanDetailsArrayList = mealplanDetailsArrayList;
this.adapterContext = adapterContext;
}
@NonNull
@Override
public MealPlanDetailsAdapter.MealPlanDetailsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater layoutInflater = LayoutInflater.from(adapterContext);
View view = layoutInflater.inflate(R.layout.mealplan_card, viewGroup, false);
return new MealPlanDetailsViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MealPlanDetailsAdapter.MealPlanDetailsViewHolder mpDetailsViewHolder, int position) {
// Set restaurant name
mpDetailsViewHolder.tvRestaurant.setText(getRestaurantName(mealplanDetailsArrayList.get(position).getRestaurantId()));
Log.d(TAG, "restaurantId:" + mealplanDetailsArrayList.get(position).getRestaurantId() + " " + position);
}
private String getRestaurantName(final String restaurantId) {
FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
CollectionReference restaurantReference = firebaseFirestore.collection("Restaurant_Data");
restaurantReference.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
if (documentSnapshot.getId().equals(restaurantId)) {
restaurantName = documentSnapshot.getString("restaurantName");
}
}
}
});
return restaurantName;
}
@Override
public int getItemCount() {
return mealplanDetailsArrayList.size();
}
class MealPlanDetailsViewHolder extends RecyclerView.ViewHolder {
public TextView tvRestaurant;
public MealPlanDetailsViewHolder(@NonNull View itemView) {
super(itemView);
tvRestaurant = itemView.findViewById(R.id.tv_restaurant);
}
}
}
Я удалил некоторые другие данные, которые загружаю в видоискатель без проблем дляради простоты, но происходит то, что в некоторых позициях название ресторана, которое я получаю из запроса (который я провожу в классе адаптеров), не отображается.Это текстовое представление выглядит пустым.
Есть идеи, почему это происходит и как я могу обойти это?