tv
, очевидно, равен null
в конце (у LinearLayout
есть только один дочерний элемент с индексом 0
), так что вы в основном вызываете setContentView(null)
, что приводит к исключению. Мне не ясно, что вы пытаетесь сделать (ваш код довольно испорчен).
Предположим, вы пытаетесь показать несколько TextView
с в LinearLayout
, вот мое предложение:
public class Idtest extends Activity {
LinearLayout mainLayout;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainLayout = new LinearLayout(this);
setContentView(mainLayout);
for (int i=0; i < 10; i++) {
TextView tv = new TextView(this);
tv.setText("Hello " + i);
mainLayout.addView(tv);
}
}
}
Если в любой последующий момент вам понадобится один из TextView
s, выполните:
TextView tvX = mainLayout.getChildAt(X); // where X is between 0 and 9
Также обратите внимание, что создание макета из кода - это зло. Если вы можете избежать этого, пожалуйста. Например, если число TextView
s является динамическим, тогда совершенно нормально создавать их из кода (хотя вы могли бы их раздуть). Однако не рекомендуется также создавать LinearLayout
из кода. Вы должны иметь это в XML. Если у вас есть возможность иметь TextView
в XML, это было бы еще лучше.