【问题标题】:display data of every child on a single page在单个页面上显示每个孩子的数据
【发布时间】:2018-08-24 10:41:17
【问题描述】:
    recyclerView = findViewById(R.id.recyclerView);

    database = FirebaseDatabase.getInstance();
    reference_root = database.getReference("/image");
    reference_grocery_and_staples = database.getReference("image/Grocery & Staples");
    reference_beverages = database.getReference("image/Beverages");
    reference_home_and_kitchen = database.getReference("image/Home & Kitchen");
    reference_furnishing_and_home_needs = database.getReference("image/Furnishing & Home Needs");
    reference_household_needs = database.getReference("image/Household Needs");
    reference_personal_care = database.getReference("image/Personal Care");
    reference_breakfast_and_dairy = database.getReference("image/Breakfast & Dairy");
    reference_biscuits_snacks_and_chocolates = database.getReference("image/Biscuits, Snacks & Chocolates");
    reference_noodles_sauces_and_instant_food = database.getReference("image/Noodles, Sauces & Instant Food");
    reference_baby_and_kids = database.getReference("image/Baby & Kids");
    reference_pet_care = database.getReference("image/Pet Care");
    reference_frozen_food = database.getReference("image/Frozen Food");
    reference_vegetables = database.getReference("image/Vegetables");




    layoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(layoutManager);


    final ArrayList<DatabaseReference> reference = new ArrayList<>();
    reference.add(reference_grocery_and_staples);
    reference.add(reference_beverages);
    reference.add(reference_home_and_kitchen);
    reference.add(reference_furnishing_and_home_needs);
    reference.add(reference_household_needs);
    reference.add(reference_personal_care);
    reference.add(reference_breakfast_and_dairy);
    reference.add(reference_biscuits_snacks_and_chocolates);
    reference.add(reference_noodles_sauces_and_instant_food);
    reference.add(reference_baby_and_kids);
    reference.add(reference_pet_care);
    reference.add(reference_frozen_food);
    reference.add(reference_vegetables);




    for(int i = 0; i < 13; i++) {
        FirebaseRecyclerOptions<ImageModel> options = new FirebaseRecyclerOptions
                .Builder<ImageModel>()
                .setQuery(reference.get(i), ImageModel.class)
                .build();


        adapter = new FirebaseRecyclerAdapter<ImageModel, HomePage.ImageHolder>(options) {

            @NonNull
            @Override
            public HomePage.ImageHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater
                        .from(HomePage.this)
                        .inflate(R.layout.row_layout, parent, false);
                HomePage.ImageHolder holder = new HomePage.ImageHolder(view);
                return holder;
            }

            @Override
            protected void onBindViewHolder(@NonNull HomePage.ImageHolder holder, int position, @NonNull final e.shweta.authenticationdemo.ImageModel model) {

                String url = model.getProductURL();
                String name = model.getProductName();
                String price = model.getProductPrice();
                String descritpion = model.getProductDescription();
                holder.textView1.setText(name);
                holder.textView2.setText("Price: Rs. " + price);
                Picasso.get()
                        .load(url)
                        .into(holder.imageView);
                holder.linearLayoutRowLayout.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(HomePage.this, e.shweta.authenticationdemo.ProductInfo.class);
                        intent.putExtra("productImage", model.getProductURL());
                        intent.putExtra("productName", model.getProductName());
                        intent.putExtra("productPrice", model.getProductPrice());
                        intent.putExtra("productDescription", model.getProductDescription());
                        startActivity(intent);

                    }
                });

            }

            @Override
            public void onDataChanged() {
                super.onDataChanged();
                adapter.notifyDataSetChanged();
            }
        };
    }

    recyclerView.setAdapter(adapter);

我想在我的主页显示所有孩子的数据。我试图循环对孩子的引用。但它所做的只是将最终循环的数据放入页面。我猜它正在这样做是因为它每次都在更新视图。

它只是向我显示最终循环的数据,即我想要每个孩子的主页上的数据的蔬菜。

【问题讨论】:

  • 您无法使用此数据库结构实现此目的,因为所有子节点的类型不同。您有自定义节点以及推送的 ID。将数据库结构更改为具有相同类型的子项,this 是一种推荐的方式,您可以通过这种方式从 Firebase 实时数据库中检索数据并使用 FirebaseRecyclerAdapter 将其显示在 RecyclerView 中。
  • 那么我将如何访问分类数据。例如:蔬菜页面中的查询是什么,因为它只接收蔬菜的数据。
  • 所以你只想展示蔬菜下面的孩子,你的图片中只有一个?
  • 先生,我会添加更多内容,但我确实为每个类别提供了一个完整的专用页面。我还想检索其页面上每个类别的数据。而且我还想在我的主页上拥有所有类别的所有数据。
  • 我正在考虑为每个孩子创建一个类别属性。然后输入类似:Query query = reference.orderByValue().equalTo("Vegetables");

标签: java android firebase firebase-realtime-database firebaseui


【解决方案1】:

您需要以不同的方式构建数据。添加另一个字段,例如 productType,可以是饮料、饼干等。如果您准备好这样做,那么只需创建一个类 Product.java:

    public class Product {

    private String productName, productPrice;//etc

    //add setters and getters
}

获取数据和更新回收站视图

    private List<Product> productList;
productList = new ArrayList<>();
mRef = database.getReference().child(); //path
        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Iterable<DataSnapshot> productData = dataSnapshot.getChildren();

                for(DataSnapshot d : productData){

                    Product product = d.getValue(Product.class);

                    if(product.getProductType() == "Beverages"){  //getProductType() is the getter from Product.java
                    productList.add(product);
                    recyclerAdapter.notifyDataSetChanged();
                }   

                //Now only beverages are added to recycler view
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

将列表项传递给适配器

recyclerAdapter = new mRecyclerAdapter(getContext(), productList);

修改您的适配器构造函数以接受这些值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多