7
votes

Android ScrollVoir la vision peut accueillir un seul enfant direct

J'ai un auditeur oncelick de la galerie qui devrait effacer toutes les lignes à l'intérieur de la tableView, puis ajouter des lignes / rangées à une vue de table dans un ScrollView. Le fragment devrait changer sur chaque bouton clic.

Cependant, je reçois: java.lang.illegalstateException: ScrollView peut héberger un seul enfant direct. P>

Bouton de myactivité strong> P>

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

    <TableLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"
        android:id="@+id/tracker_layout">

    </TableLayout>

</ScrollView>


8 Réponses :


1
votes

euh ... ne mettez pas plusieurs vues à l'intérieur d'une vue de défilement. Mettez une seule vue à l'intérieur de celui-ci, c'est le type de mise en page que vous souhaitez pour vos vues multiples - TableLayout, Framelayout, etc.


2 commentaires

Le seul enfant dans mon ScrollView n'est-il pas Tablayout?


Si l'exception se produit, vous obtenez plusieurs vues dans la vue Scroll. Pourquoi? Il a ajouté une exception ci-dessous. Apparemment, il ajoute une hiérarchie de vue d'un fragment à une vue de défilement.



0
votes

EDIT (2ème réponse):

Je joue avec le code et je ne suis toujours pas sûr de savoir pourquoi cela se produit, il y a définitivement quelque chose qui ne va pas sur le gestionnaire de fragments lorsqu'il échange des fragments (remplacer (Restern, fragment) ) p>

dans mon fragment onCréateView a été ce code: p>

FATAL EXCEPTION: main
java.lang.IllegalStateException: ScrollView can host only one direct child
at android.widget.ScrollView.addView(ScrollView.java:219)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:787)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977)
at android.app.BackStackRecord.run(BackStackRecord.java:638)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1309)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:398)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)


1 commentaires

Et quel est le "article"? Une sorte de variable initialisée à Oncreeview ()?



5
votes

En fait, vous ne pouvez pas avoir de choses comme: xxx

mais si vous avez un élément supplémentaire en dehors de la table, il se bloque avec un java.lang.illegalStateException: ScrollView Peut héberger un seul enfant direct

exemple xxx

espère cette aide.


0 commentaires

5
votes

Je sais que cette question est assez ancienne mais j'ai couru dans le même problème et cela finit par être que vous ne pouvez pas avoir un ScrollView comme vue de base pour la mise en page.

Il suffit de envelopper la vision de ScrollView dans votre mise en page Tracker.xml avec un relativelayoutout et vous devez être bon pour aller


0 commentaires

2
votes

Une autre possibilité est que l'élément de fermeture ne correspond pas. C'est à dire.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
    <LinearLayout ...>
        ...
    </LinearLayout>
</LinearLayout>


0 commentaires

3
votes

Vous devez ajouter linearlayout dans ScrollView, cela fonctionnera.


0 commentaires

0
votes

Essayez d'utiliser un code> au lieu du code> dans votre main.xml strong>

donc au lieu de P>

getSupportFragmentManager().beginTransaction()
    .replace(R.id.details_container, new DetailsFragment(), DETAILFRAGMENT_TAG)
    .commit();


0 commentaires

0
votes

Je souffre de ce problème la semaine dernière, puis trouvez la meilleure réponse possible de ce problème.

ScrollView peut héberger un seul enfant direct


0 commentaires