![](/img/trans.png)
[英]App updates data in firebase real-time database but doesn't show anything in recyclerview
[英]I can't show data from my firebase real-time database on a recyclerView
我想使用 recyclerView 顯示來自 firebase 數據庫的數據。 一切正常,奇怪的是我沒有錯誤,但應該有一個列表的活動是空白的
這里是數據應該加載 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);
}
}
這是我的 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);
}
}
這是類別 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;
}
}
有人能幫我嗎? 我需要盡快完成它,因為這是我最后一年的項目,謝謝
編輯:
我的代碼做了一些改動
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();
}
}
仍然無法在RecyclerView
上有任何數據
可能有很多原因,但我將針對從提供的信息中可以看到的內容。
您忘記通過在onCreateViewHolder()
中提供列表項布局來構建適配器列表,因此您需要擴展此布局並返回自定義 ViewHolder MenuViewHolder
的新實例,如下所示
@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);
}
注意:這里我假設您的項目布局稱為row_item.xml
更新
在將適配器設置為RecyclerView
之前,通過刪除notifyDataSetChange()
和startListening()
來操作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) {
}
});
}
};
adapter.startListening();
categorieRv.setAdapter(adapter);
Log.e("Categories_Medicament", "last laodmenu");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.