"IllegalStateException: scrollview puede alojar sólo un hijo directo" en un LinearLayout añadiendo

Tengo la lista de archivos adjuntos y quiero hacer que mi LinearLayout con él sea horizontalmente Scrollable. Añado solamente un niño LinearLayout a mi HorizontalScrollView, además obtengo IllegalStateException. Mi xml:

<HorizontalScrollView android:id="@+id/scrollMessageFiles" android:layout_width="fill_parent" android:layout_height="65dp" android:layout_below="@+id/editMessage" android:orientation="horizontal" android:weightSum="1.0" > <LinearLayout android:id="@+id/panelMessageFiles" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#FFFFFF" > </LinearLayout> </HorizontalScrollView> 

Y desea agregar la lista de archivos al LinearLayout en el ScrollView como esto:

 public void addFiles() { HorizontalScrollView scroll = (HorizontalScrollView) findViewById(R.id.scrollMessageFiles); LinearLayout layout = (LinearLayout) findViewById(R.id.panelMessageFiles); if(!FileManagerActivity.getFinalAttachFiles().isEmpty()) { for (File file: FileManagerActivity.getFinalAttachFiles()) { View line = new View(this); line.setLayoutParams(new LayoutParams(1, LayoutParams.MATCH_PARENT)); line.setBackgroundColor(0xAA345556); informationView = new TextView(this); informationView.setTextColor(Color.BLACK); informationView.setTextSize(12); informationView.setCompoundDrawablesWithIntrinsicBounds( 0, R.drawable.file_icon, 0, 0); informationView.setText(file.getName().toString()); layout.addView(informationView, 0); layout.addView(line, 1); } scroll.addView(layout); } } 

Añadir sólo un LinearLayout a la HorizontalScrollView, además de obtener

  FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.assignmentexpert/com.assignmentexpert.NewMessageActivity}: java.lang.IllegalStateException: HorizontalScrollView can host only one direct child at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalStateException: HorizontalScrollView can host only one direct child at android.widget.HorizontalScrollView.addView(HorizontalScrollView.java:223) at com.assignmentexpert.NewMessageActivity.addFiles(NewMessageActivity.java:165) at com.assignmentexpert.NewMessageActivity.onCreate(NewMessageActivity.java:90) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 

En la línea

  scroll.addView(layout); 

Sólo tienes que eliminar esta línea: scroll.addView(layout); Ya tiene esto declarado en xml y está intentando agregarlo de nuevo, por eso está recibiendo la excepción de varios niños.

Intente ejecutar esto:

 public void addFiles() { HorizontalScrollView scroll = (HorizontalScrollView) findViewById(R.id.scrollMessageFiles); LinearLayout layout = (LinearLayout) findViewById(R.id.panelMessageFiles); if(!FileManagerActivity.getFinalAttachFiles().isEmpty()) { for (File file: FileManagerActivity.getFinalAttachFiles()) { View line = new View(this); line.setLayoutParams(new LayoutParams(1, LayoutParams.MATCH_PARENT)); line.setBackgroundColor(0xAA345556); informationView = new TextView(this); informationView.setTextColor(Color.BLACK); informationView.setTextSize(12); informationView.setCompoundDrawablesWithIntrinsicBounds( 0, R.drawable.file_icon, 0, 0); informationView.setText(file.getName().toString()); layout.addView(informationView, 0); layout.addView(line, 1); } // This line is telling the system to add your LinearLayout to the ScrollView when it is already there, declared in your xml layout file //scroll.addView(layout); } } 

scroll.addView(layout); simplemente eliminar scroll.addView(layout);

 <HorizontalScrollView android:id="@+id/btnholder" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_marginTop="131dp" android:scrollbars="horizontal" > <LinearLayout android:id="@+id/holderscroll" android:layout_width="fill_parent" android:layout_height="55dp" android:layout_marginTop="2dp" > </LinearLayout> </HorizontalScrollView> 

SubcategoryscrollV = (HorizontalScrollView) findViewById (R.id.btnholder);

Addbtnlinearlay = (LinearLayout) findViewById (R.id.holderscroll);

Y añada su botón en la disposición:

Addbtnlinearlay.addView (btn [i]);

Lo siento, pero ni siquiera se molestó en leer su código, el error es muy claro:

HorizontalScrollView can host only one direct child

¡No ponga más de un niño en una vista de desplazamiento horizontal! Poner un grupo de vista allí (disposición lineal, distribución relativa, lo que quieras) y en ese grupo se pone a los niños.

Quite al niño viejo, antes de intentar agregar nuevo. Tratar:

 scroll.removeAllViews(); 

antes de

 scroll.addView(layout); 

Un ScrollView sólo puede tener un hijo, por lo que no tiene sentido añadir más niños a él directamente. Digamos que su ScrollView tiene un LinearLayout dentro de él, entonces usted puede agregar más vistas al LinearLayout:

  • Ajuste automático de TextView para Android
  • ¿Cómo mostrar varias líneas de texto con desplazamiento en android?
  • ¿Cómo utilizar la fuente personalizada en android xml?
  • Hacer que los elementos de ListView sean seleccionables
  • El botón de clic no cambia el valor de vista de texto
  • Android ScrollView scrollTo () método no funciona con TextView?
  • Puedo cambiar el aspecto y la sensación de la clickablespan
  • Cómo ajustar el tamaño de la fuente del texto para que se ajuste a textview
  • TextView y color de fondo
  • Android: agrega texto a la presentación al pulsar el botón
  • Cómo hacer referencia a programación <string> en archivo xml en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.