我需要在布局中添加一些字符串,但是我需要在一个新行(作为列表)中添加每个字符串,并使布局在超出垂直维度时可滚动。这些字符串的数量是在运行时定义的,所以我喜欢这样:
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
对象,所以我认为我应该以另一种更合适的方式执行此操作。请解释我如何正确地将字符串添加到布局并使其可滚动。提前谢谢!
答案 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);