0

我得到了我的充气机来显示我想要的行数。我无法将文本插入到充气机内的每个文本视图中。它只填充了第一个 TextView 并将其余部分留空。我尝试使用数组但不断收到运行时错误

            for (int i = 1; i <= numberOfGuests; ++i) {
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.row_per_person, table);
            float numberInsertedForPerson = (float) (Math.round(tipPerPersons * 100.0) / 100.0);
            String sTipPerPerson = Float.toString(numberInsertedForPerson);
            tipPerPerson = (TextView) findViewById(R.id.tipPerPerson);
            tipPerPerson.setText(sTipPerPerson);

        }
4

2 回答 2

2

您的问题是(在我看来)非常令人困惑的LayoutInflater.

首先,您应该缓存一个引用,而不是LayoutInflater在每次迭代时获取。其次,当您调用该inflate(int, ViewGroup)方法时,它实际上返回了第二个参数(the ViewGroup),而不是inflated View。对此的答案是将第三个参数(是否View应该附加)作为 false 传递。这将为您提供膨胀的View,然后您可以将其附加到父级ViewGroup。正确的方法如下所示:

LayoutInflater in = getLayoutInflater();

for (int i = 1; i <= numberOfGuests; i++) {
    View v = in.inflate(R.layout.row_per_person, table, false);
    float num = (float) (Math.round(tipPerPersons * 100.0) / 100.0);
    String tip = Float.toString(num);
    tipPerPerson = (TextView) v.findViewById(R.id.tipPerPerson);
    tipPerPerson.setText(tip);
    table.addView(v);
}
于 2013-09-29T22:22:03.087 回答
0

您应该添加 view.findViewById 而不是使用 findViewById

于 2013-09-29T22:21:51.893 回答