Android 基于excel文件中的数据动态将自定义布局添加到ArrayList
在这里,我想根据excel中的数据动态地将行(自定义布局)添加到ArrayList中。一切正常,只是我只加载了ArrayAdapter的最后一个值 首先是我的实例变量的声明:Android 基于excel文件中的数据动态将自定义布局添加到ArrayList,android,android-layout,android-listview,apache-poi,android-arrayadapter,Android,Android Layout,Android Listview,Apache Poi,Android Arrayadapter,在这里,我想根据excel中的数据动态地将行(自定义布局)添加到ArrayList中。一切正常,只是我只加载了ArrayAdapter的最后一个值 首先是我的实例变量的声明: List<Record> model = new ArrayList<Record>(); RecordAdapter adapter = null; 这是我用来从excel文件加载数据的loadData()方法: public void loadData() { //Instantiat
List<Record> model = new ArrayList<Record>();
RecordAdapter adapter = null;
这是我用来从excel文件加载数据的loadData()方法:
public void loadData() {
//Instantiate holder
Record r = new Record();
try {
//get the excel file
workbook = new HSSFWorkbook(file);
sheet = workbook.getSheetAt(0);
//parse data from excel to holder
for (int i = FIRST_ROW_TO_GET; i <= (sheet.getLastRowNum() + 1); i++) {
Row row = sheet.getRow(i);
//New Data
if (row == null) {
r.setFormNo(filename(fileName));
r.setEntryNo(String.valueOf(i));
r.setPNO("Data Baru");
r.setDefSpec("Tidak Ada");
r.setLpF("");
r.setOrycDmg(false);
r.setTermiteDmg(false);
r.setRatDmg(false);
r.setSampler("");
r.setPnD_Date("");
r.setPnD_Time("");
} else {
//Existing Data
for (int cn = row.getFirstCellNum(); cn <= row.getLastCellNum(); cn++) {
Cell c = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);
//Blank cells handler
if (c == null) {
switch (cn) {
case 0:
r.setFormNo(filename(fileName));
break;
case 1:
r.setEntryNo(String.valueOf(i));
break;
case 2:
r.setPNO("Data Baru");
break;
case 3:
r.setDefSpec("Tidak Ada");
break;
case 4:
r.setLpF("");
break;
case 5:
r.setOrycDmg(false);
break;
case 6:
r.setTermiteDmg(false);
break;
case 7:
r.setRatDmg(false);
break;
case 8:
r.setSampler("");
break;
case 9:
r.setPnD_Date("");
break;
case 10:
r.setPnD_Time("");
break;
}
} else {
//non empty cells handler
switch (cn) {
case 0:
r.setFormNo(c.getStringCellValue());
break;
case 1:
r.setEntryNo(c.getStringCellValue());
break;
case 2:
r.setPNO(c.getStringCellValue());
break;
case 3:
r.setDefSpec(c.getStringCellValue());
break;
case 4:
r.setLpF(c.getStringCellValue());
break;
case 5:
if (Integer.parseInt(c.getStringCellValue()) == 1)
r.setOrycDmg(true);
else
r.setOrycDmg(false);
break;
case 6:
if (Integer.parseInt(c.getStringCellValue()) == 1)
r.setTermiteDmg(true);
else
r.setTermiteDmg(false);
break;
case 7:
if (Integer.parseInt(c.getStringCellValue()) == 1)
r.setRatDmg(true);
else
r.setRatDmg(false);
break;
case 8:
r.setSampler(c.getStringCellValue());
break;
case 9:
r.setPnD_Date(c.getStringCellValue());
break;
case 10:
r.setPnD_Time(c.getStringCellValue());
break;
}
}
}
}
adapter.add(r);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void loadData(){
//实例化持有者
记录r=新记录();
试一试{
//获取excel文件
工作簿=新的HSSF工作簿(文件);
工作表=工作簿。getSheetAt(0);
//将数据从excel解析到holder
对于(int i=FIRST_ROW_TO_GET;i您需要在循环中初始化一个新的Record
对象。否则它将更新相同的对象并为每一行显示相同的数据
public void loadData() {
try {
//get the excel file
workbook = new HSSFWorkbook(file);
sheet = workbook.getSheetAt(0);
//parse data from excel to holder
for (int i = FIRST_ROW_TO_GET; i <= (sheet.getLastRowNum() + 1); i++) {
Record r = new Record(); // move this HERE
Row row = sheet.getRow(i);
...
...
public void loadData(){
试一试{
//获取excel文件
工作簿=新的HSSF工作簿(文件);
工作表=工作簿。getSheetAt(0);
//将数据从excel解析到holder
对于(int i=FIRST_ROW_TO_GET;i)“用LoadData()循环的最后一个值填充ListView”是什么意思?您能更清楚地解释一下吗?在LoadData()的//parse data from excel TO holder部分,您在哪里调用notifyDataSetChanged
函数。我尝试从excel文件加载所有内容,直到该文件的最后一行+1行(对于新数据)。假设excel文件中有4行数据。从逻辑上讲,循环应使用4行数据填充ListView,并且仅在第5行显示行==null(对于新数据).但我得到的是ListView中填充了5行新数据行。
public void loadData() {
//Instantiate holder
Record r = new Record();
try {
//get the excel file
workbook = new HSSFWorkbook(file);
sheet = workbook.getSheetAt(0);
//parse data from excel to holder
for (int i = FIRST_ROW_TO_GET; i <= (sheet.getLastRowNum() + 1); i++) {
Row row = sheet.getRow(i);
//New Data
if (row == null) {
r.setFormNo(filename(fileName));
r.setEntryNo(String.valueOf(i));
r.setPNO("Data Baru");
r.setDefSpec("Tidak Ada");
r.setLpF("");
r.setOrycDmg(false);
r.setTermiteDmg(false);
r.setRatDmg(false);
r.setSampler("");
r.setPnD_Date("");
r.setPnD_Time("");
} else {
//Existing Data
for (int cn = row.getFirstCellNum(); cn <= row.getLastCellNum(); cn++) {
Cell c = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);
//Blank cells handler
if (c == null) {
switch (cn) {
case 0:
r.setFormNo(filename(fileName));
break;
case 1:
r.setEntryNo(String.valueOf(i));
break;
case 2:
r.setPNO("Data Baru");
break;
case 3:
r.setDefSpec("Tidak Ada");
break;
case 4:
r.setLpF("");
break;
case 5:
r.setOrycDmg(false);
break;
case 6:
r.setTermiteDmg(false);
break;
case 7:
r.setRatDmg(false);
break;
case 8:
r.setSampler("");
break;
case 9:
r.setPnD_Date("");
break;
case 10:
r.setPnD_Time("");
break;
}
} else {
//non empty cells handler
switch (cn) {
case 0:
r.setFormNo(c.getStringCellValue());
break;
case 1:
r.setEntryNo(c.getStringCellValue());
break;
case 2:
r.setPNO(c.getStringCellValue());
break;
case 3:
r.setDefSpec(c.getStringCellValue());
break;
case 4:
r.setLpF(c.getStringCellValue());
break;
case 5:
if (Integer.parseInt(c.getStringCellValue()) == 1)
r.setOrycDmg(true);
else
r.setOrycDmg(false);
break;
case 6:
if (Integer.parseInt(c.getStringCellValue()) == 1)
r.setTermiteDmg(true);
else
r.setTermiteDmg(false);
break;
case 7:
if (Integer.parseInt(c.getStringCellValue()) == 1)
r.setRatDmg(true);
else
r.setRatDmg(false);
break;
case 8:
r.setSampler(c.getStringCellValue());
break;
case 9:
r.setPnD_Date(c.getStringCellValue());
break;
case 10:
r.setPnD_Time(c.getStringCellValue());
break;
}
}
}
}
adapter.add(r);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void loadData() {
try {
//get the excel file
workbook = new HSSFWorkbook(file);
sheet = workbook.getSheetAt(0);
//parse data from excel to holder
for (int i = FIRST_ROW_TO_GET; i <= (sheet.getLastRowNum() + 1); i++) {
Record r = new Record(); // move this HERE
Row row = sheet.getRow(i);
...
...