Java 我能';t在recyclerView上显示来自firebase实时数据库的数据
我想使用recyclerView显示firebase数据库中的数据。一切正常,奇怪的是我没有错误,但是应该有列表的活动是空白的 下面是数据应该加载到类中的位置:Java 我能';t在recyclerView上显示来自firebase实时数据库的数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想使用recyclerView显示firebase数据库中的数据。一切正常,奇怪的是我没有错误,但是应该有列表的活动是空白的 下面是数据应该加载到类中的位置: public class Categories_Medicaments extends AppCompatActivity { private RecyclerView categorieRv; private LinearLayoutManager layoutManager; FirebaseDatabase data
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);
}
}
这是分类课:
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();
}
public class Categories\u药物扩展应用程序活动{
私人回收视图分类;
私人专线经理;布局经理;
Firebase数据库;
数据库参考类别;
FirebaseRecyclerAdapter适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u categories\u药物);
如果(android.os.Build.VERSION.SDK_INT>9){
StrictMode.ThreadPolicy策略=新建
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
}
CategorieV=(RecyclerView)findViewById(R.id.categories_RV);
categorieRv.setHasFixedSize(真);
layoutManager=新的LinearLayoutManager(此);
分类设置布局管理器(布局管理器);
database=FirebaseDatabase.getInstance();
category=database.getReference(“categories”);
Log.e(“类别药物”、“外部装载菜单”);
loadMenu();
}
私有void加载菜单(){
Log.e(“药品类别”、“内部装载菜单”);
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(类别,分类.class)
.build();
Log.e(“药物类别”、“期权之后”);
适配器=新的FirebaseRecyclerAdapter(选项){
@非空
@凌驾
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
Log.e(“药品类别”、“菜单视图内部”);
View=LayoutFlater.from(parent.getContext()).flate(R.layout.categie_项,parent,false);
返回新的MenuViewHolder(视图);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull MenuViewHolder holder,int position,@NonNull Categorie model){
Log.e(“药品类别”、“内部约束”);
最终分类clickItem=模型;
setItemClickListener(新的ItemClickListener(){
@凌驾
公共void OnClick(视图、int位置、布尔值isLongClick){
}
/*@凌驾
公共void onClick(视图、int位置、布尔值isLongClick){
//Toast.makeText(home.this,“+clickItem.getName(),Toast.LENGTH_SHORT.show();I
Intent COUNTHDETAIL=新Intent(类别_MEDICATIONS.this,ClothesDetail.class);
clothDetail.putExtra(“ClothId”,adapter.getRef(position.getKey());
星触觉(细节);
} */
});
}
};
分类设置适配器(适配器);
adapter.startListening();
adapter.notifyDataSetChanged();
Log.e(“药物类别”、“最后一个老挝菜单”);
}
@凌驾
受保护的void onStart(){
Log.e(“药品类别”、“内部启动”);
super.onStart();
loadMenu();
adapter.startListening();
}
}
而且仍然无法在
RecyclerView
上获得任何数据,这可能有很多原因,但我将针对从提供的信息中可以看到的内容
您忘记了通过在onCreateViewHolder()
中提供列表项布局来构建适配器列表,因此需要膨胀此布局并返回自定义ViewHolderMenuViewHolder
的新实例,如下所示
@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\u item.xml
更新
在将适配器设置为RecyclerView
现在将您的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");
}
private void loadMenu(){
Log.e(“药品类别”、“内部装载菜单”);
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(类别,分类.class)
.build();
Log.e(“药物类别”、“期权之后”);
适配器=新的FirebaseRecyclerAdapter(选项){
@非空
@凌驾
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
Log.e(“药品类别”、“菜单视图内部”);
View=LayoutFlater.from(parent.getContext()).flate(R.layout.categie_项,parent,false);
返回新的MenuViewHolder(视图);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull MenuViewHolder holder,int position,@NonNull Categorie model){
Log.e(“药品类别”、“内部约束”);
最终分类clickItem=模型;
setItemClickListener(新的ItemClickListener(){
@凌驾
公共void OnClick(视图、int位置、布尔值isLongClick){
}
});
}
};
adapter.startListening();
分类设置适配器(适配器);
Log.e(“药物类别”、“最后一个老挝菜单”);
}
我在MenuViewHolder类中添加了此方法,但没有任何更改:(我陷入此错误已3年。)days@ayalihoum对于更新的答案,您删除了onBindViewHolder()中的holder.txtMenuName.setText(model.getNom());
method..plz请确保添加itI我确实很感谢您,虽然效果不错,但它只显示了我的第一个项目list@ay
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");
}