向布局添加多个字符串

时间:2014-04-14 22:20:43

标签: android list layout textview scrollview

我需要在布局中添加一些字符串,但是我需要在一个新行(作为列表)中添加每个字符串,并使布局在超出垂直维度时可滚动。这些字符串的数量是在运行时定义的,所以我喜欢这样:

ScrollView scrollView = new ScrollView(context);
LinearLayout scrollViewLayout = new LinearLayout(context);
scrollViewLayout.setOrientation(LinearLayout.VERTICAL);
LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
                                             LayoutParams.WRAP_CONTENT);
TextView tv2;

for(int i = 0; i < count; i++) { //count is defined at runtime when the
                                 //array strings[] is created
                                 //and defines the amount of array's values
    tv2 = new TextView(context);
    tv2.setLayoutParams(layoutParams);
    tv2.setText(strings[i]);
    scrollViewLayout.addView(tv2);
}

scrollView.addView(scrollViewLayout);

但我不认为在循环中实例化对象并添加这样的字符串是可以接受的,而且,我得到了日志消息&#34; GC_FOR_ALLOC ......&#34;和#34;成长堆......&#34;因为那个ScrollView对象,所以我认为我应该以另一种更合适的方式执行此操作。请解释我如何正确地将字符串添加到布局并使其可滚动。提前谢谢!

2 个答案:

答案 0 :(得分:2)

您无法一次又一次地使用相同的TextView的原因吗?

例如:

tv2.setText(tv2.getText() + *newline* + msg);

在你的情况下:

for(String str : strings)
{
     tv2.setText(tv2.getText() + *newline* + str);
}

答案 1 :(得分:1)

为什么不在每次循环迭代中只使用一个TextView并附加文本。像

这样的东西
TextView tv2;
tv2 = new TextView(context);
tv2.setLayoutParams(layoutParams);
for(int i = 0; i < count; i++) { //count is defined at runtime when the
                             //array strings[] is created
                             //and defines the amount of array's values
    if (i > 0)
        tv2.append(" \n" + strings[i]);
    else
        tv2.setText(strings[i]);
}
scrollView.addView(scrollViewLayout);