You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:00:50