Добавление textViews в цикл for - PullRequest
0 голосов
/ 07 ноября 2011
      scrollview = (ScrollView)findViewById(R.id.detailedScrollView);


  for (Quotation quotation : object.quotes){

          TextView quote = new TextView(this);
          quote.setText(quotation.getQuote());
          quote.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
          scrollview.addView(quote);


      }

Допустим, есть три кавычки, тогда я хочу иметь три textViews. Однако приведенный выше код приводит к сбою моего приложения. Есть очевидные ошибки? Вот ошибка, которую я получаю:

11-06 17:35:53.214: E/AndroidRuntime(1430): java.lang.IllegalStateException: ScrollView can host only one direct child

Ответы [ 3 ]

6 голосов
/ 07 ноября 2011

Вы не можете добавлять виды непосредственно внутри прокрутки. Scrollview может содержать только один объект макета. То, что вам нужно сделать, это добавить линейный макет в ваше представление прокрутки, а затем добавить текстовое представление к линейному макету

3 голосов
/ 07 ноября 2011

Контейнер макета для иерархии представлений, который может прокручиваться пользователем, что позволяет ему быть больше, чем физический дисплей.ScrollView - это FrameLayout, то есть вы должны поместить в него одного потомка, содержащего все содержимое для прокрутки;этот потомок сам может быть менеджером макета со сложной иерархией объектов.Дочерний элемент, который часто используется, - это LinearLayout в вертикальной ориентации, представляющий вертикальный массив элементов верхнего уровня, через которые пользователь может прокручивать.

Класс TextView также заботится о собственной прокрутке, поэтомутребуется ScrollView, но использование их вместе позволяет добиться эффекта текстового представления в большем контейнере. Пожалуйста, более подробно

С наилучшими пожеланиями, Психо

0 голосов
/ 30 марта 2016

Вам необходимо добавить «LinearLayout» (или «RelativeLayout») внутри ScrollView. Скажем, у вас есть макет XML следующим образом:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <LinearLayout
    android:id="@+id/linearlayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"        
    >       
  </LinearLayout>
</ScrollView>

И теперь вы хотите добавить TextView программно, а именно:

LinearLayout linearLayout =(LinearLayout) this.findViewById(R.id.linearlayout1);
for (Quotation quotation : object.quotes){
     TextView quote = new TextView(this);
     quote.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
     quote.setPadding(4, 0, 4, 0);    //left,top,right,bottom
     quote.setText(quotation.getQuote());          
     linearLayout.addView(quote);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...