"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:
- Desactivar la conversión de palabras en un TextView multi-línea de Android
- El color negro viene en cambio un fondo transparente para textview en android
- Animación del tamaño de texto de TextView de Android y no de TextView
- Diseño de mensajes de WhatsApp - Cómo obtener una vista de tiempo en la misma fila
- Android cómo identificar el elemento en listview con casilla de verificación
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);
- Espaciado de líneas por defecto de Android TextView
- AppCompat v22: Establecer el color de texto predeterminado para TextView
- Android TextView SetText () detiene la marquesina de otro TextView - solución?
- Debe utilizar "sp" en lugar de "dp" para los tamaños de texto
- Cómo implementar una animación creciente de 0 a 600 en 5 segundos en TextVIew en android
- Creación de la caja de conmutación onClickListener para TextView
- Detectar si TextView en ListView está ellipsizado
- Padding arround textview con fondo de nueve parches no tienen efecto visual
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:
- Desactivar el tiempo de espera de la pantalla Teléfono / tablet Android
- ¿Cómo agregar el borde coloreado en cardview?