Автоматическое добавление нескольких пользовательских представлений в макет

Если у меня, например, есть пустой макет, например:

layout1.xml

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

И еще один макет:

layout2.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView 1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 3" android:layout_weight="1"/> </LinearLayout> 

Я хотел бы добавить layout2.xml в layout1.xml программно. Мне нужно было бы иметь несколько разных версий layout2.xml которые я бы добавил, когда захочу. Каждый из них имел бы другой текст в TextView и Buttons.

В случае обычного Android View я обычно делаю это аналогично с addView :

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv1 = new TextView(this); tv1.setText("HELLO"); my_linear_layout.addView(tv1); Button btn2 = new Button(this); bt2.setText("WORLD"); my_linear_layout.addView(btn2); } 

Как я могу это сделать, если у меня нет чего-то простого, например TextView или Button, и если у меня есть собственный xml-вид View?

Можно ли каким-то образом разместить все виды внутри адаптера, как для ListView, а затем получить его при необходимости и просто вызвать addView в этих представлениях?

Solutions Collecting From Web of "Автоматическое добавление нескольких пользовательских представлений в макет"

Вы можете раздуть файл layout2.xml, отредактировать тексты и добавить его в первый макет:

 public class MyActivity extends Activity { private ViewGroup mLinearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1); mLinearLayout = (ViewGroup) findViewById(R.id.linear_layout); addLayout("This is text 1", "This is first button", "This is second Button"); } private void addLayout(String textViewText, String buttonText1, String buttonText2) { View layout2 = LayoutInflater.from(this).inflate(R.layout.layout2, mLinearLayout, false); TextView textView = (TextView) layout2.findViewById(R.id.button1); Button button1 = (Button) layout2.findViewById(R.id.button2); Button button2 = (Button) layout2.findViewById(R.id.button3); textView1.setText(textViewText); button1.setText(buttonText1); button2.setText(buttonText2); mLinearLayout.addView(layout2); } } 

Вы можете изменить android:layout_height layout_height корневого представления wrap_content для wrap_content .

Layout1 содержит ScrollView в качестве родительского макета и основного LinearLayout как дочернего, если элемент строки больше не имеет размера. Элемент переполнения элемента прокруткиView с прокруткой:

layout1.xml

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/my_linear_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </ScrollView> 

Используйте LayoutInflater, чтобы добавить элемент строки в родительский LinearLayout:

 private LinearLayout my_linear_layout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1); my_linear_layout = (LinearLayout) findViewById(R.id.my_linear_layout); for(int i=1;i<=5;i++){ View view = LayoutInflater.from(this).inflate(R.layout.layout2,null); TextView button1 = (TextView) view.findViewById(R.id.button1); Button button2 = (Button) view.findViewById(R.id.button2); TextView button3 = (TextView) view.findViewById(R.id.button3); button1.setText("HELLO " + i); button2.setText("HELLO "+i); button3.setText("HELLO "+i); my_linear_layout.addView(view); } } 

Попробуйте этот метод

Добавить id в linearlayout layout1.xml

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/firstlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > </LinearLayout> 

В oncreate

  LinearLayout firstlayout=(LinearLayout)findviewbyId(R.id.firstlayout); LinearLayout secondlayoout=(LinearLayout)this.getLayoutInflater().inflate(R.layout.layout2,null); //inflating view from xml TextView btn1=(TextView)secondlayoout.findviewbyId(R.id.button1); btn1.settext("TEST"); firstlayout.addview(secondlayoout);