
Мне нужно получить значения бестселлера от AGS Biryani в представлении ресайлера, не знаю, как добавить дочерние значения в адаптер ресайлера на основе родительского узла
Модель
public class Food_List {
private String itemname;
private String itemdescrp;
private long itemnewprice;
private long itemoldprice;
public String getItemname() {
return itemname;
}
public void setItemname(String itemname) {
this.itemname = itemname;
}
public String getItemdescrp() {
return itemdescrp;
}
public void setItemdescrp(String itemdescrp) {
this.itemdescrp = itemdescrp;
}
public long getItemnewprice() {
return itemnewprice;
}
public void setItemnewprice(long itemnewprice) {
this.itemnewprice = itemnewprice;
}
public long getItemoldprice() {
return itemoldprice;
}
public void setItemoldprice(long itemoldprice) {
this.itemoldprice = itemoldprice;
}
}
Food_List_ViewHolders
ViewHolders для добавления значения в представлении Recyler
public class Food_List_ViewHolders extends RecyclerView.ViewHolder {
View mView;
private Context context;
Context mContext;
String nodata;
public Food_List_ViewHolders(View itemView) {
super(itemView);
mView=itemView;
}
@SuppressLint("SetTextI18n")
public void setDetails(Context applicationContext, final String itemname, String itemdescrp,
final long itemnewprice,
final long itemoldprice
)
{
final TextView dishitemname=mView.findViewById(R.id.dishheader);
TextView dishitemnamedescrp=mView.findViewById(R.id.dishheaderdescrp);
TextView dishitemnameoldprice=mView.findViewById(R.id.itemoldprice);
TextView dishitemnamenewprice=mView.findViewById(R.id.itemnewprice);
dishitemname.setText(itemname);
dishitemnamedescrp.setText(itemdescrp);
dishitemnamenewprice.setText(applicationContext.getString(R.string.Rup) + itemnewprice);
dishitemnameoldprice.setText(applicationContext.getString(R.string.Rup) + itemoldprice);
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mView) {
Context context = mView.getContext();
}
});
}
}
Основная деятельность
Не знаю, как добавить дочерние значения в DataSnapshot
mRecycleriew =findViewById(R.id.my_recycler_views);
mRecycleriew.setLayoutManager(new LinearLayoutManager(this));
mFirebaseDatabase= FirebaseDatabase.getInstance();
mRef=mFirebaseDatabase.getReference().child("restaurants").equalTo("AGS Biryani");
//DatabaseReference restaurantsRef = mRef.child("restaurants");
mRef(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()){
progressDoalog.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void mRef(ValueEventListener valueEventListener) {
}
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Food_List,Food_List_ViewHolders> firebaseRecyclerAdapter=
new FirebaseRecyclerAdapter<Food_List, Food_List_ViewHolders>(
Food_List.class,
R.layout.item_child,
Food_List_ViewHolders.class,
mRef)
{
@Override
protected void populateViewHolder(Food_List_ViewHolders viewHolder, Food_List model, int position) {
viewHolder.setDetails(getApplicationContext(),model.getItemname(),model.getItemdescrp(),model.getItemnewprice(),model.getItemoldprice());
}
};
mRecycleriew.setAdapter(firebaseRecyclerAdapter);
}
вы можете выполнить итерацию снимка, чтобы получить всех дочерних элементов текущего дочернего элемента. используя цикл, например. for (DataSnapshot messageSnapshot: dataSnapshot.getChildren ()) {String name = (String) messageSnapshot.child ("элемент"). getValue (); String price = (String) messageSnapshot.child («цена»). GetValue (); }
Спасибо @JawadZeb Можете ли вы поделиться кодом ???
Я перепишу твой код. скажи мне, что ты хочешь сделать? вы хотите получить все значения в узле ресторана?
@JawadZeb Похоже, Kali использует FirebaseUI FirebaseRecyclerAdapter, который уже обрабатывает упомянутый вами цикл. Его populateViewHolder имеет элемент модели Food_List, который FirebaseUI автоматически десериализует с DataSnapshot. Я (пока) не уверен, почему он не работает, но им не нужно перебирать getChildren() самостоятельно.
Большое спасибо @Jawad, не все ценности ... мне нужно показать ценности "бестселлеров" от "AGS Biryani"
Спасибо за ответ @FrankvanPuffelen. Есть идея показать ценности "бестселлеров" в recylerview?
По сути, вы делаете:
mRef=mFirebaseDatabase.getReference().child("restaurants").equalTo("AGS Biryani");
FirebaseRecyclerAdapter<Food_List,Food_List_ViewHolders> firebaseRecyclerAdapter=
new FirebaseRecyclerAdapter<Food_List, Food_List_ViewHolders>(
Food_List.class,
R.layout.item_child,
Food_List_ViewHolders.class,
mRef)
Это означает, что вы показываете все рестораны с приоритетом AGS Biryani. Это не то, что вы пытаетесь сделать, поэтому вам нужно изменить свой ref:
mRef=mFirebaseDatabase.getReference().child("restaurants/AGS Biryani/bestsellers");
Когда вы передадите этот код в FirebaseRecyclerAdapter, он покажет все бестселлеры AGS Biryani.
ОШИБКА: E / RecyclerView: адаптер не подключен; пропуская макет @Frank
Это похоже на другую проблему. Вы проверяли предыдущие вопросы с этим сообщением об ошибке?
mRef = mFirebaseDatabase.getReference (). child («рестораны») в этом режиме будет отображаться макет, а в этом режиме экран макета дочернего («рестораны / AGS Biryani / бестселлеры») пуст. я думаю проблема в геттере и сеттере? @Откровенный
как проверить базовые значения Fire («рестораны / AGS Biryani / бестселлеры») в логате? @Откровенный
Что показывает ваш экран, когда вы используете /restaurants? Кажется маловероятным, что это правильно. Класс Food_List не моделирует ресторан, он моделирует еду, которая, похоже, находится под bestsellers. Вот на что вы должны указать свой адаптер. В моем фрагменте это /restaurants/AGS Biryani/bestsellers.
Вы не можете добавить в снэпчат. вы можете получить только в снапшопе. если вам нужно отправить значения на базу огня, вы можете использовать .set Value () для узла.