Android: добавление двух текстовых представлений программно
Я пытаюсь добавить виды в линейный макет программно.
LinearLayout layout = (LinearLayout) findViewById(R.id.info);
String [] informations = topOffer.getInformations();
TextView informationView;
View line = new View(this);
line.setLayoutParams(new LayoutParams(1, LayoutParams.FILL_PARENT));
line.setBackgroundColor(R.color.solid_history_grey);
for (int i = 0; i < informations.length; i++) {
informationView = new TextView(this);
informationView.setText(informations[i]);
layout.addView(informationView, 0);
layout.addView(line, 1);
}
Во-первых, я только добавил информационный экран, и все сработало нормально. Butt после добавления также строки-View, он разбился со следующей ошибкой:
java.lang.IllegalStateException: указанный дочерний элемент уже имеет родителя. Сначала вы должны вызвать removeView() для родительского родителя.
Итак, я попробовал addView (View v, int index), но он разбился с тем же сообщением...
Есть ли у кого-то решение?
Спасибо,
Мартин
Ответы
Ответ 1
Как gpmoo7 сказал, что вам нужно создавать каждый раз, когда новый вид в цикле
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linear);
LinearLayout layout = (LinearLayout) findViewById(R.id.linear);
String[] informations = new String[] { "one", "two", "three" };
TextView informationView;
for (int i = 0; i < informations.length; i++) {
View line = new View(this);
line.setLayoutParams(new LayoutParams(1, LayoutParams.MATCH_PARENT));
line.setBackgroundColor(0xAA345556);
informationView = new TextView(this);
informationView.setText(informations[i]);
layout.addView(informationView, 0);
layout.addView(line, 1);
}
}
Ответ 2
Вы не можете добавить одно и то же дочернее представление несколько раз в одно и то же родительское представление.
Вам нужно каждый раз создавать новое представление или раздувать новое представление.