Android: добавление двух видов текста программно - PullRequest
12 голосов
/ 09 июля 2010

Я пытаюсь программно добавить виды в линейный макет.

    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);
    }

Во-первых, я только добавил информационный вид, и все работало нормально. Приклад после добавления также строки-View, он вылетел со следующей ошибкой:

java.lang.IllegalStateException: указанный дочерний элемент уже имеет родителя. Сначала вы должны вызвать removeView () у родителя ребенка.

Итак, я попробовал addView (View v, int index), но он вылетел с тем же сообщением ...

У кого-нибудь есть решение?

Спасибо, Martin

Ответы [ 2 ]

12 голосов
/ 27 января 2011

Как сказал 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 голосов
/ 19 января 2011

Вы не можете добавить одно и то же дочернее представление несколько раз в одном родительском представлении. Вам нужно каждый раз создавать новый вид или раздувать новый.

...