为什么下面的代码导致不同的代码1崩溃,代码2很好。 此代码将ArrayList(一,二,三等)的值作为单独的TextView输出到LinearLayout。
CODE-1
LinearLayout rootView = (LinearLayout) findViewById(R.id.rootView);
TextView numberView = new TextView(this);
int index = 0;
while (index < 10){
numberView.setText(words.get(index));
rootView.addView(numberView);
index = index + 1;
}
CODE-2
LinearLayout rootView = (LinearLayout) findViewById(R.id.rootView);
int index = 0;
while (index < 10){
TextView numberView = new TextView(this);
numberView.setText(words.get(index));
rootView.addView(numberView);
index = index + 1;
}
答案 0 :(得分:0)
这两者之间的区别是
在第1部分中,您将视图(TextView)添加到循环内的LinearLayout。在每次迭代中,您每次都要添加相同的实例。在第2部分中,您始终在每次迭代中创建TextView的新实例并添加到LinearLayout。而且我相信,您正在多次将同一实例添加到导致问题但不确定的同一父布局中。 希望有所帮助
答案 1 :(得分:0)
希望您已经知道,一般来说,循环中的代码将被执行多次,循环外的代码只会被执行一次。
在CODE-1中,此行只执行一次:
TextView numberView = new TextView(this);
这意味着只创建了一个 TextView
。
在循环中,您有以下几行:
numberView.setText(words.get(index));
rootView.addView(numberView);
index = index + 1;
您要反复设置TextView
的文字。您一次又一次地将TextView
作为子视图添加到rootView
。
首先,在循环中多次设置同一文本视图的文本只会导致文本视图显示您设置的最后一个文本,忽略所有中间文本。
其次,将视图作为子视图添加到另一个视图多次根本没有任何意义。这也可能是异常的原因。一个视图只能有一个父视图,因此它不能再次作为子视图添加,而不会事先从父视图中删除它。
在CODE-2中,您将文本视图的初始化放在循环中。这将创建多个文本视图,并将每个文本视图作为子视图添加到rootView
,因此这里没有问题。