2010-11-29 6 views
5

Мое приложение предназначено для создания опросов. Для этого пользователь должен иметь возможность создавать новые поля динамически.Наложение вида несколько раз на одного родителя при нажатии кнопки

Итак, при создании нового опроса активность отображается только с двумя кнопками (добавление и удаление). Когда пользователь нажимает кнопку добавления, появляется строка, содержащая EditText (чтобы он мог написать вопрос), Spinner (который позволяет пользователю выбирать тип поля: текст, RadioButton, CheckBox и т. Д.) И другой EditText (в котором записаны различные доступные варианты ответа, если это применимо).

Для этого я создал файл XML, содержащий эти виджеты, и каждый раз, когда пользователь нажимает кнопку добавления, XML раздувается. Он работает в первый раз, когда я нажимаю кнопку, но после этого ... ничего не происходит.

Я где-то читал, что вы не можете раздуть одного ребенка 2 раза в родительском, если это не сделано в цикле.

Итак, мои вопросы:

-> Как я могу обойти эту проблему и получить желаемый эффект?

-> Почему это не применяется в Loop?

Любая помощь или подсказка оцениваются. Еще раз большое спасибо за всю поддержку, оказанную моим сообществом.

ПРИМЕЧАНИЕ. В документации по андроидному оборудованию они говорят о клонировании инфлятора, но информации там мало, и я не мог найти никакой другой информации об этом.

исходный код:

XML - Главная cointainer:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:id="@+id/wrapper" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 

    <Button 
     android:id="@+id/mds_new_addfield_button" 
     android:tag="new" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add Field" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
    /> 
    <Button 
     android:id="@+id/mds_new_deletefield_button" 
     android:tag="delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Delete Field" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
    /> 

</RelativeLayout> 

XML -Inflated:

<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
> 
    <TableRow> 
     <TextView 
      android:id="@+id/mdsnew_field_tv" 
      style="@style/dsn_field" 
      android:text="Field Name " 
     /> 

     <TextView 
      android:id="@+id/mdsnew_type_tv" 
      style="@style/dsn_field" 
      android:text="Type of Field " 
     /> 

     <TextView 
      android:id="@+id/mdsnew_choices_tv" 
      style="@style/dsn_field" 
      android:text="Choices" 
     /> 
    </TableRow> 

    <TableRow> 

     <EditText 
      android:id="@+id/mdsnew_fieldname_et" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Field Name" 
      android:textSize="18sp" 
     /> 

     <Spinner 
      android:id="@+id/mdsnew_type_sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
     /> 

     <EditText 
      android:id="@+id/mdsnew_choices_et" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Choices " 
      android:textSize="18sp" 
     /> 

    </TableRow> 
</TableLayout> 

Добавить Кнопка:

LinearLayout myRoot = (LinearLayout) findViewById(R.id.wrapper); 

LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

inflater.inflate(R.layout.mds_new_row, myRoot); 
+2

Вы можете раздуть одного и того же ребенка два или более раз. То, что вы не можете сделать, это использовать один и тот же экземпляр вида несколько раз. Каждый раз, когда вы вызываете метод `inflate`` LayoutInflater`, вы создаете новый `View`, поэтому у вас не должно быть проблем с тем, как вы делаете. Итак ... может быть, ошибка в другом месте ... Не могли бы вы поделиться файлами XML (контейнер и тот, который завышен во время исполнения)? Кроме того, будет полезен фрагмент кода, в котором вы раздуваете представление. – Cristian 2010-11-29 00:46:09

+0

Отредактировано сообщение, чтобы включить то, что вы просили! (спасибо за вашу помощь!) – Tivie 2010-11-29 00:55:59

ответ

13

Ваш родитель является LinearLayout, и похоже, что вы вертикальная ориентация, но вы этого не указали. Попробуйте настроить ориентацию и посмотрите, помогает ли это.

Смежные вопросы