Android开发:for循环生成表格行重复显示列表起始元素的问题
问题解决:表格行重复显示列表开头元素
问题原因
你的sessionList是将3个会话的所有字段平铺成了一维列表,每个会话对应8个字段(和表头列数一致)。但内层循环每次都从索引0开始读取sessionList的元素,导致每一行都重复显示第一个会话的所有数据,无法遍历后续会话的内容。
解决方案
方案1:重构数据为二维列表(推荐)
将一维的sessionList改成二维列表,每个子列表对应一个会话的8个字段,这样循环时可以直接按行读取每个会话的数据。
首先调整数据结构:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; // 每个子列表存储一个会话的所有字段 List<List<String>> allSessionData = new ArrayList<>(); allSessionData.add(Arrays.asList("5", "12/10/2022 12:04:08 AM", "10 chars hira", "5", "5", "00m:05s", "[ら, た, ら, ら, は]", "1")); allSessionData.add(Arrays.asList("4", "12/09/2022 10:10:36 PM", "10 chars hira", "5", "5", "00m:04s", "[わ, な, あ, な, あ]", "1")); allSessionData.add(Arrays.asList("2", "12/09/2022 07:39:14 PM", "10 chars kata", "7", "3", "00m:05s", "[ハ, ラ, ア, マ, ハ, マ, ヤ]", "1"));
然后修改表格行生成代码:
for (List<String> session : allSessionData) { TableRow row = new TableRow(this); for (String field : session) { TextView columns = new TextView(this); columns.setLayoutParams(new TableRow.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); columns.setGravity(Gravity.CENTER); columns.setTextColor(Color.BLACK); columns.setTextSize(18); columns.setPadding(5, 5, 5, 5); columns.setText(field); row.addView(columns); } tableLayout.addView(row); }
方案2:通过偏移量读取一维列表数据
如果不想修改原有数据结构,可以通过计算索引偏移量来定位每行对应的起始位置。每个会话占8个字段,所以第rowCount行的起始索引为rowCount * 8,从该索引开始读取8个元素即可。
修改后的表格行生成代码:
// 每个会话的字段数,和表头列数一致 int columnsPerSession = tableHeader.length; for (int rowCount = 0; rowCount < allSession.size(); rowCount++) { TableRow row = new TableRow(this); // 计算当前行的起始索引 int startIndex = rowCount * columnsPerSession; for (int columnCount = 0; columnCount < columnsPerSession; columnCount++) { TextView columns = new TextView(this); columns.setLayoutParams(new TableRow.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); columns.setGravity(Gravity.CENTER); columns.setTextColor(Color.BLACK); columns.setTextSize(18); columns.setPadding(5, 5, 5, 5); // 读取当前行对应列的元素 columns.setText(sessionList.get(startIndex + columnCount)); row.addView(columns); } tableLayout.addView(row); }
内容的提问来源于stack exchange,提问作者No Name
相关产品推荐
相关产品推荐

