0

我有几个 EditTexts 排列在行和列上。这些 EditTexts 包含产品名称、数量和价格以及一个实时显示总数的 TextView(每次在其中一个 EditTexts 上书写时都会计算它)我已经设置了一个按钮在单击时将行的可见性(产品名称、价格和数量的 3EditTexts)设置为 GONE 的每一行。我的问题是,在我将可见性设置为 GONE 之后,虽然没有更多的 EditTexts,但它仍然会从 GONE 之前计算它们的值。

我现在的问题是,当 EditTexts 设置为 visibility.GONE 时会发生什么?我的应用程序实时计算,所以当 EditText 发生某些事情时,他会再次计算..但就像值仍然存在......这不应该是隐形和消失之间的区别吗?

我将向您展示我的计算方式(即使在您按下 X 按钮以擦除 EditTexts 后也会调用它,不仅在您更改 EditTexts 内的值时)

public void calculeaza() {

    totaltest = 0;
    prod = new String[allprod.size()];
    pret = new String[allpret.size()];
    cant = new String[allcant.size()];

    for (int m = 0; m < allprod.size(); m++) {

        prod[m] = allprod.get(m).getText().toString();
        if (prod[m].matches("")) {
            prod[m] = "    -    ";

        }
    }

    for (int j = 0; j < allcant.size(); j++) {

        cant[j] = allcant.get(j).getText().toString();
        if (cant[j].matches("")) {
            cant[j] = Float.toString(0);

        }
    }

    for (int k = 0; k < allpret.size(); k++) {
        pret[k] = allpret.get(k).getText().toString();
        if (pret[k].matches("")) {
            pret[k] = Float.toString(0);

        }
    }

    for (int l = 0; l < allpret.size(); l++) {

        Float temp = Float.parseFloat(cant[l]) * Float.parseFloat(pret[l]);

        totaltest = totaltest + temp;

        TextView totalf = (TextView) findViewById(R.id.total);
        totalf.setText(String.format("Total: %.2f", totaltest));

    }
}
4

2 回答 2

1

直接来自 Android 开发网站的线路..

View.GONE This view is invisible, and it doesn't take any space for layout purposes.

View.INVISIBLE This view is invisible, but it still takes up space for layout purposes.

即它EditText甚至在之后保留对象Gone..

如果您不希望它保留其值,您可以重新初始化edittext...或setText = ""

上面引用的是唯一的区别......

希望这可以帮助...

于 2013-06-22T08:50:53.770 回答
1

我在您发布的代码中并没有真正看到我可以用来回答这个问题的任何内容,但是对于 setVisibility 的作用似乎有些混乱:

页面上看不到 INVISIBLE 元素,但它们仍然占用空间(它们所在的位置有一个洞)

GONE 元素在屏幕上没有可见的效果,从用户的角度来看,它们并不存在。但是,它们仍然是视图的一部分。

如果要从视图中删除对象,则需要在其父对象上调用 removeView()。

从视图中删除后,它可能仍会占用内存,以防您的代码在任何变量中保留对它的引用。

在没有对它的进一步引用之后,它可能仍会占用内存,至少在垃圾收集器处理它之前是这样。

我希望上面相当笼统的陈述有助于澄清情况。

于 2013-06-22T08:56:44.887 回答