首页 > 解决方案 > 在 Android 中使用 Firebase 数据动态填充表格行

问题描述

所以我想从firebase数据库动态地将数据添加到我的表中这是我的数据库的图像。我想用数据库中的数据填充我的表行表中的产品名称应该是皇家和皇家闪光,表中的阴影名称应该是数据库中阴影部分的名称,如 rb3、银、金但金和银不能归入皇家产品名称

Firebase 数据库

这是我的 Java 代码

package com.example.stockmanagementsystem;



public class PurchaseReport extends AppCompatActivity {

ArrayList<String> shadeNameList;
ArrayList<String>  productNameList;
ArrayList<String> litreList = new ArrayList<>();
TableLayout tableLayout;
TableRow tableRow;
DatabaseReference databaseReference,databaseReference1;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_purchase_report);
    tableLayout = findViewById(R.id.purchase_report_layout);

    //root instance
    databaseReference  = FirebaseDatabase.getInstance().getReference();

    productNameList = new ArrayList<>();
    shadeNameList= new ArrayList<>();

    productList();

    final Handler handler = new Handler();
    final int delay = 1000;

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            if(!productNameList.isEmpty()){

                for (int i=0 ; i<productNameList.size();i++){

                    databaseReference1  = FirebaseDatabase.getInstance().
                            getReference(productNameList.get(i)).child("shade");

                    shadeList();

                    if(!shadeNameList.isEmpty()) {
                        for (int j = 0; j < shadeNameList.size(); j++) {

                            final int jNum = j;
                            tableRow = new TableRow(PurchaseReport.this);

                            TextView v1 = new TextView(PurchaseReport.this);
                            v1.setText(String.valueOf(i + 1));
                            v1.setTextColor(Color.RED);
                            v1.setBackgroundResource(R.drawable.border_row);
                            v1.setGravity(Gravity.CENTER);
                            v1.setTextSize(18);
                            tableRow.addView(v1);

                            TextView v2 = new TextView(PurchaseReport.this);
                            v2.setText("27/12/2020");
                            v2.setTextColor(Color.RED);
                            v2.setBackgroundResource(R.drawable.border_row);
                            v2.setGravity(Gravity.CENTER);
                            v2.setTextSize(18);
                            tableRow.addView(v2);

                            TextView v3 = new TextView(PurchaseReport.this);
                            v3.setText(productNameList.get(i));
                            v3.setTextColor(Color.RED);
                            v3.setBackgroundResource(R.drawable.border_row);
                            v3.setGravity(Gravity.CENTER);
                            v3.setTextSize(18);
                            tableRow.addView(v3);

                            final TextView v4 = new TextView(PurchaseReport.this);

                            databaseReference1.addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot snapshot) {

                                    if(snapshot.hasChild(shadeNameList.get(jNum))){

                                        v4.setText(shadeNameList.get(jNum));
                                        v4.setTextColor(Color.RED);
                                        v4.setBackgroundResource(R.drawable.border_row);
                                        v4.setGravity(Gravity.CENTER);
                                        v4.setTextSize(18);
                                        Log.i("V4", String.valueOf(v4.getText()));
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError error) {
                                }
                            });

                            tableRow.addView(v4);

                            TextView v5 = new TextView(PurchaseReport.this);
                            v5.setText("2 Litre");
                            v5.setTextColor(Color.RED);
                            v5.setBackgroundResource(R.drawable.border_row);
                            v5.setGravity(Gravity.CENTER);
                            v5.setTextSize(18);
                            tableRow.addView(v5);

                            TextView v6 = new TextView(PurchaseReport.this);
                            v6.setText("2");
                            v6.setTextColor(Color.RED);
                            v6.setBackgroundResource(R.drawable.border_row);
                            v6.setGravity(Gravity.CENTER);
                            v6.setTextSize(18);
                            tableRow.addView(v6);

                            TextView v7 = new TextView(PurchaseReport.this);
                            v7.setText("12");
                            v7.setTextColor(Color.RED);
                            v7.setBackgroundResource(R.drawable.border_row);
                            v7.setGravity(Gravity.CENTER);
                            v7.setTextSize(18);
                            tableRow.addView(v7);

                            TextView v8 = new TextView(PurchaseReport.this);
                            v8.setText("123");
                            v8.setTextColor(Color.RED);
                            v8.setBackgroundResource(R.drawable.border_row);
                            v8.setGravity(Gravity.CENTER);
                            v8.setTextSize(18);
                            tableRow.addView(v8);
                            tableLayout.addView(tableRow);
                        }
                    }else{

                        handler.postDelayed(this,delay);
                    }

                }

            }else{
                handler.postDelayed(this,delay);
            }
        }
    },delay);

}

private void shadeList() {

    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                //adding name to the arrayList
                shadeNameList.add(ds.getKey());
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.d("TAG", databaseError.getMessage());
        }
    };
    databaseReference1.addListenerForSingleValueEvent(eventListener);
}

private void productList(){

    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                //adding name to the arrayList
                productNameList.add(ds.getKey());
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.d("TAG", databaseError.getMessage());
        }
    };
    databaseReference.addListenerForSingleValueEvent(eventListener);
}

}

我想要的输出是这个

期望的输出

我得到的输出

输出

任何帮助将不胜感激!!!

标签: javaandroidfirebasefirebase-realtime-databaseandroid-tablelayout

解决方案


对于动态内容,使用带有 ViewHolder 的 RecyclerView 和 RecyclerViewAdapter。


推荐阅读