簡體   English   中英

我無法在 recyclerView 上顯示來自我的 firebase 實時數據庫的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM