在运行时,用户填充SQLite数据库。
当用户在其onCreate方法中打开某个活动时,我会填充TableLayout。 我使用While循环执行此操作。我在TableLayout中膨胀的所有行在TextViews中都有相同的数据。我是否必须添加所有TableRows和TextViwes不同的ID?
我认为如果我在创建View时添加“false”应该解决我的问题,但它不会。
View tr = inflater.inflate(R.layout.table_row_chronology, null,false);
我认为问题出在我的代码中。如果不是,我将不得不更好地了解当用户向数据库添加数据时会发生什么。
以下是填充TableLayout的代码:
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TableLayout tableChronology = (TableLayout) findViewById(R.id.tableLayout1);
// --------------------------------------------------------------------------------
MyDatabase myDB = new MyDatabase(this);
try {
myDB.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
ArrayList<HashMap<String, String>> historyList = myDB.getHistory();
Iterator<HashMap<String, String>> iterator = historyList.iterator();
HashMap<String,String> oneRowMap;
// --------------------------------------------------------------------------------
// Add and inflate table rows while there is data
while(iterator.hasNext()){
oneRowMap = (HashMap<String,String>) iterator.next();
View tr = inflater.inflate(R.layout.table_row_chronology, null,false);
tableChronology = (TableLayout) findViewById(R.id.mainTable);
String productName = oneRowMap.get("ProductName");
String calories = oneRowMap.get("Calories");
String protein = oneRowMap.get("Protein");
String carbohydrates = oneRowMap.get("Carbohydrates");
String fats = oneRowMap.get("Fats");
String grams = oneRowMap.get("Grams");
//date = oneRowMap.get("Date");
TextView tv_productName = (TextView) tr.findViewById(R.id.textView_name_show);
TextView tv_calories = (TextView) tr.findViewById(R.id.textView_kcal_show);
TextView tv_protein = (TextView) tr.findViewById(R.id.textView_protein_show);
TextView tv_carbohydrates = (TextView) tr.findViewById(R.id.textView_carbohydrates_show);
TextView tv_fats = (TextView) tr.findViewById(R.id.textView_fats_show);
TextView tv_grams = (TextView) tr.findViewById(R.id.textView_grams_show);
tv_productName.setText(productName);
tv_calories.setText(calories);
tv_protein.setText(protein);
tv_carbohydrates.setText(carbohydrates);
tv_fats.setText(fats);
tv_grams.setText(grams);
tableChronology.addView(tr);
Toast.makeText(Today.this, "Беше добавен продукт", Toast.LENGTH_SHORT).show();
myDB.close();
}
答案 0 :(得分:0)
回答我自己的问题。看来我上面的代码没关系,它运行正常。 问题出在我的方法中,用HashMaps
撤回了一个完整的ArrayList ArrayList<HashMap<String, String>> historyList = myDB.getHistory();
以下是该方法的主要代码:
getHistory():
do {
historyMap = new HashMap<String, String>();
historyMap.put("NumberId", myCursor.getString(0));
historyMap.put("ProductName", myCursor.getString(1));
historyMap.put("Calories", myCursor.getString(2));
historyMap.put("Protein", myCursor.getString(3));
historyMap.put("Carbohydrates", myCursor.getString(4));
historyMap.put("Fats", myCursor.getString(5));
historyMap.put("Grams", myCursor.getString(6));
// historyMap.put("Date", myCursor.getString(7));
historyArray.add(historyMap);
} while (myCursor.moveToNext());
似乎我已经在循环之外创建了HashMap,并且我将相同的对象传递给.add()方法。因此,我一遍又一遍地使用相同的对象填充ArrayList。
historyMap = new HashMap<String, String>();