java - 在 Android 中使用 Firebase 数据动态填充表格行
问题描述
所以我想从firebase数据库动态地将数据添加到我的表中这是我的数据库的图像。我想用数据库中的数据填充我的表行表中的产品名称应该是皇家和皇家闪光,表中的阴影名称应该是数据库中阴影部分的名称,如 rb3、银、金但金和银不能归入皇家产品名称
这是我的 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);
}
}
我想要的输出是这个
我得到的输出
任何帮助将不胜感激!!!
解决方案
对于动态内容,使用带有 ViewHolder 的 RecyclerView 和 RecyclerViewAdapter。