【问题标题】:removeAllViews() not removing TableRow children in a TableLayoutremoveAllViews() 不删除 TableLayout 中的 TableRow 子项
【发布时间】:2012-04-22 01:41:43
【问题描述】:

一些背景: 我的程序的一部分存在问题,我正在构建“编辑数据库”视图,然后再次删除行。每次显示时,“编辑数据库”视图将显示的字段都不同。编辑数据库视图是一个表格布局,数据库中的每一行都是表格布局中的一行。当用户退出编辑视图时,该视图应该在下一次被释放或擦除行。

我的问题是,无论我尝试什么,我都无法删除 tablelayout 中的行。以下是相关代码:

获取xml文件中tablelayout的句柄

setContentView(R.layout.database_entry);
TableLayout editorLayout = (TableLayout)findViewById(R.id.DatabaseLayout);

布局被传递给另一个类,在那里它们被添加到布局中,如下所示:

//layout is the tablelayout from earler, passed into this function
TableRow row = new TableRow(contex);
row .setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
//stuff added to the row....
//...
//...
layout.addView(row);

当我尝试擦除 Tablelayout 时,我运行此代码

TableLayout editorLayout = (TableLayout)findViewById(R.id.DatabaseLayout);
editorLayout.removeAllViews();

无论我做什么,下次我点击按钮编辑代码时,它都会显示之前的行以及添加的新行。它们不会从表中删除。我没有收到任何错误消息或任何有用的调试信息,它只是无法正常工作。

我已经为此苦苦挣扎了一段时间。尝试动态创建表格布局(无 xml 文件),尝试使用其索引删除每一行(或仅一行)。我已经使用 Hierarchy Viewer 来检查以确保所有内容都是该 tablelayout 的子项(它是)。如果有人有任何见解,将不胜感激。

【问题讨论】:

  • 不知道还有没有人看这个。但是回到我在运行 removeAllViews() 时发现的问题,tableLayout 属性“mChildrenCount”设置为 0,但是仍然有指向“mChildView”中找到的每个子视图的指针 removeAllViews() 中是否有一些代码失败删除子指针?我将逐步检查源本身,看看我是否能找出问题所在。

标签: java android user-interface tablelayout tablerow


【解决方案1】:

我能够找出问题所在。首先,上面的评论有点错误,mChildren 数组没有包含任何指向我删除的视图的指针。他们被淘汰了,就像他们应该做的那样。

我的行没有被删除的原因是,在我调用removeAllViews() 之后,我切换了内容视图setContentView(R.layout.main);。当我注释掉这一行时,删除子代码按预期工作。我假设一些android后端优化代码决定removeAllViews()不需要运行,或者在内存中的某个地方更新。并且在此函数内部所做的所有更改均不适用。

我将把所有这些代码放在一个新的活动中(它最初真正属于的地方)。但我想提供一个解释,以防其他人遇到同样的问题。

【讨论】:

    【解决方案2】:

    删除行后,尝试将可见性设置为 GONE 并再次设置为 Visible,这应该可以解决删除行故障。

    【讨论】:

    • 试过了,没用。我什至尝试将可见性设置为 GONE,但仍然没有效果。就好像我在 editorLayout 中没有得到正确的对象,但我已经使用调试检查了对象内部,并且它具有正确的 ID。
    猜你喜欢
    • 2014-11-28
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2014-10-01
    相关资源
    最近更新 更多