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

Android动态TableLayout异常:首次加载正常,返回/重定向后无TableRow

我来帮你排查下这个问题——你遇到的首次进入Activity时TableRow能正常创建,但返回/重定向回来就失效的情况,大概率是这几个细节没处理好,咱们一步步解决:

1. 检查Volley请求的触发时机

如果你的请求代码只写在onCreate()里,那当你从其他页面返回时,当前Activity会走onResume()生命周期而不是重新执行onCreate(),这时候请求根本没发起,自然不会生成新的TableRow。

解决办法:把请求逻辑封装成独立方法,在onCreate()和onResume()里都调用它,确保每次进入/回到这个页面都会重新拉取数据:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout);
    // 初始化视图、Dialog等操作
    loadServiceHistoryData();
}

@Override
protected void onResume() {
    super.onResume();
    loadServiceHistoryData();
}

// 封装请求逻辑
private void loadServiceHistoryData() {
    // 这里放你的Volley请求代码
    StringRequest request = new StringRequest(Request.Method.GET, YOUR_API_URL, 
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // 你的JSON解析、TableRow创建逻辑
            }
        }, 
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                pDialog.hide();
                Toast.makeText(ServiceHistoryActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }) {
        @Override
        public Priority getPriority() {
            return Priority.HIGH;
        }
    };
    request.setShouldCache(false);
    AppData.getInstance().addToRequestQueue(request);
}

2. 替换创建视图的上下文

你现在用getApplicationContext()来创建TableRow和TextView,这可能导致视图的主题、布局参数和当前Activity不兼容,在生命周期切换时无法正常显示。应该直接用当前Activity的上下文:

// 原来的代码
tableRow5 = new TableRow(getApplicationContext());
value5 = new TextView(getApplicationContext());

// 修改后
tableRow5 = new TableRow(ServiceHistoryActivity.this);
value5 = new TextView(ServiceHistoryActivity.this);

3. 每次请求前清空TableLayout旧数据

如果返回时没有清空之前的TableRow,新添加的行可能被旧视图覆盖,或者因为视图层级问题无法渲染。在解析JSON、创建新行之前,先清空TableLayout:

// 在onResponse的开头添加
maintable5.removeAllViews();
// 如果有自定义分隔线,记得后续重新添加

4. 加日志排查请求状态

可以在Volley的响应和错误回调里加日志,确认返回/重定向时请求是否真的发起、是否拿到了有效数据:

@Override
public void onResponse(String response) {
    Log.d("ServiceHistory", "拿到的接口数据: " + response);
    // 原来的解析逻辑
}

@Override
public void onErrorResponse(VolleyError error) {
    Log.e("ServiceHistoryError", "请求失败原因: " + error.toString());
    pDialog.hide();
    Toast.makeText(ServiceHistoryActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}

按这几步调整后,应该就能解决返回时TableRow不显示的问题了。

内容的提问来源于stack exchange,提问作者Muhilan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:07:43