I want to display data from firebase database using a recyclerView. everything works fine, I weirdly have no erreors but the activity that should have a list is blank
here is where the data should load class:
public class Categories_Medicaments extends AppCompatActivity {
private RecyclerView categorieRv;
private LinearLayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference category;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_categories__medicaments);
if (android.os.Build.VERSION.SDK_INT > 9)
{
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
categorieRv = (RecyclerView)findViewById(R.id.categories_RV);
categorieRv.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
categorieRv.setLayoutManager(layoutManager);
database = FirebaseDatabase.getInstance();
category = database.getReference("categories");
loadMenu();
}
private void loadMenu() {
FirebaseRecyclerOptions<Categorie> options =
new FirebaseRecyclerOptions.Builder<Categorie>()
.setQuery(category, Categorie.class)
.build();
FirebaseRecyclerAdapter<Categorie,MenuViewHolder> adapter = new FirebaseRecyclerAdapter<Categorie,MenuViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull MenuViewHolder holder, int position, @NonNull Categorie model) {
holder.txtMenuName.setText(model.getNom());
Categorie clickItem = model;
holder.setItemClickListener((view, position1, isLongClick) -> Toast.makeText(Categories_Medicaments.this,""+clickItem.getNom(),Toast.LENGTH_SHORT).show());
}
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
};
categorieRv.setAdapter(adapter);
}
}
here is my MenuViewHolder:
public class MenuViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView txtMenuName;
private ItemClickListener itemClickListener;
public MenuViewHolder(@NonNull View itemView) {
super(itemView);
txtMenuName=(TextView)itemView.findViewById(R.id.recycle_categoryName);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public void onClick(View v) {
itemClickListener.OnClick(v,getAdapterPosition(),false);
}
}
and this is the categories class:
public class Categorie {
private String Nom;
public Categorie(String nom) {
Nom = nom;
}
public String getNom() {
return Nom;
}
public void setNom(String nom) {
Nom = nom;
}
}
can someone help me? i need to finish it real soon because it's my final year project thank you
Edit:
I have changed a little in my code
public class Categories_Medicaments extends AppCompatActivity {
private RecyclerView categorieRv;
private LinearLayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference category;
FirebaseRecyclerAdapter<Categorie, MenuViewHolder> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_categories__medicaments);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
categorieRv = (RecyclerView) findViewById(R.id.categories_RV);
categorieRv.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
categorieRv.setLayoutManager(layoutManager);
database = FirebaseDatabase.getInstance();
category = database.getReference("categories");
Log.e("Categories_Medicament", "Outside loadmenu");
loadMenu();
}
private void loadMenu() {
Log.e("Categories_Medicament", "Inside loadmenu");
FirebaseRecyclerOptions<Categorie> options =
new FirebaseRecyclerOptions.Builder<Categorie>()
.setQuery(category, Categorie.class)
.build();
Log.e("Categories_Medicament", "After Options");
adapter = new FirebaseRecyclerAdapter<Categorie, MenuViewHolder>(options) {
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Log.e("Categories_Medicament", "Inside MenuView");
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.categorie_item, parent, false);
return new MenuViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull MenuViewHolder holder, int position, @NonNull Categorie model) {
Log.e("Categories_Medicament", "Inside onBind");
final Categorie clickItem = model;
holder.setItemClickListener(new ItemClickListener() {
@Override
public void OnClick(View view, int position, boolean isLongClick) {
}
/*@Override
public void onClick(View view, int position, boolean isLongClick) {
// Toast.makeText(home.this, "" + clickItem.getName(), Toast.LENGTH_SHORT).show();I
Intent clothDetail = new Intent(Categories_Medicaments.this,ClothesDetail.class);
clothDetail.putExtra("ClothId",adapter.getRef(position).getKey());
startActivity(clothDetail);
} */
});
}
};
categorieRv.setAdapter(adapter);
adapter.startListening();
adapter.notifyDataSetChanged();
Log.e("Categories_Medicament", "last laodmenu");
}
@Override
protected void onStart() {
Log.e("Categories_Medicament", "Inside onStart");
super.onStart();
loadMenu();
adapter.startListening();
}
}
And still can't have any data on the RecyclerView
There might be many reason for that, but I will target what can be seen from the provided info.
You forget to build your adapter list by providing list item layout into onCreateViewHolder()
, so you need to inflate this layout and return a new instance of your custom ViewHolder MenuViewHolder
like below
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_item, parent, false);
return new MenuViewHolder(view);
}
Note: here I'm assuming that your item layout is called row_item.xml
Update
Manipulate loadMenu()
by removing notifyDataSetChange()
and startListening()
before setting the adapter to the RecyclerView
Now change your loadMenu()
to be:
private void loadMenu() {
Log.e("Categories_Medicament", "Inside loadmenu");
FirebaseRecyclerOptions<Categorie> options =
new FirebaseRecyclerOptions.Builder<Categorie>()
.setQuery(category, Categorie.class)
.build();
Log.e("Categories_Medicament", "After Options");
adapter = new FirebaseRecyclerAdapter<Categorie, MenuViewHolder>(options) {
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Log.e("Categories_Medicament", "Inside MenuView");
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.categorie_item, parent, false);
return new MenuViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull MenuViewHolder holder, int position, @NonNull Categorie model) {
Log.e("Categories_Medicament", "Inside onBind");
final Categorie clickItem = model;
holder.setItemClickListener(new ItemClickListener() {
@Override
public void OnClick(View view, int position, boolean isLongClick) {
}
});
}
};
adapter.startListening();
categorieRv.setAdapter(adapter);
Log.e("Categories_Medicament", "last laodmenu");
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.