Android ScrollView peut accueillir un seul enfant direct
J'ai un onclick auditeur dans la galerie qui doit effacer toutes les lignes à l'intérieur de la tableview, puis ajouter des lignes, des lignes à un tableview à l'intérieur d'un scrollview. Le fragment doit changer à chaque clic sur le bouton.
Cependant j'obtiens: java.lang.IllegalStateException: le ScrollView peut accueillir un seul enfant direct.
myactivity bouton de l'écouteur
TrackerFragment tf = (TrackerFragment) getFragmentManager().findFragmentById(R.id.tracker1);
tf = TrackerFragment.newInstance(listOfList.get(id).get(position));
fragmentTransaction.add(R.id.tracker1, tf);
fragmentTransaction.commit();
t1 = true; //being used
getFragmentManager().executePendingTransactions();
tracker fragment
public class TrackerFragment extends Fragment
{
private Dish dish;
public static TrackerFragment newInstance(Serializable dish)
{
TrackerFragment tf = new TrackerFragment();
Bundle args = new Bundle();
args.putSerializable("dish", dish);
tf.setArguments(args);
return tf;
}
public static TrackerFragment newInstance(Bundle bundle)
{
Dish dish = (Dish) bundle.getSerializable("dish");
return newInstance(dish);
}
@Override
public void onCreate(Bundle myBundle)
{
super.onCreate(myBundle);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.tracker, container, false);
TableLayout tableLayout = (TableLayout) v.findViewById(R.id.tracker_layout);
tableLayout.removeAllViews();
if (dish != null)
{
//display others
//display subsystem stuff
for (int i = 0; i < dish.getSubsystems().size(); i++)
{
TableRow tableRow = new TableRow(v.getContext());
tableRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
TextView tv = new TextView(v.getContext());
tv.setText(dish.getSubsystems().get(i).getConnFuncAddr());
tableRow.addView(tv);
tableLayout.addView(tableRow);
}
}
else
{
TableRow tableRow = new TableRow(v.getContext());
tableRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
TextView tv = new TextView(v.getContext());
tv.setText("Click on image to view more data");
tableRow.addView(tv);
tableLayout.addView(tableRow);
}
return v;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Trackers -->
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="300dp"
android:layout_weight="1"
android:orientation="vertical">
<fragment
android:name="android.gallery.TrackerFragment"
android:id="@+id/tracker1"
android:layout_height="500dp"
android:layout_width="300dp"
android:layout_weight="1">
</fragment>
</LinearLayout>
<!-- Gallery -->
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="600dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="245dp">
<Gallery
android:id="@+id/galleryid0"
android:layout_width="fill_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="245dp">
<Gallery
android:id="@+id/galleryid1"
android:layout_width="fill_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="245dp">
<Gallery
android:id="@+id/galleryid2"
android:layout_width="fill_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
tracker.xml
<?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>
Personne ne sait quoi de mal? Je devine que je suis l'ajout d'une ligne de tableau à la scrollview et pas la tableview, cependant, je ne vois pas où je fais ce qui cloche dans mon code.
OriginalL'auteur Raptrex | 2011-06-30
Vous devez vous connecter pour publier un commentaire.
En fait, vous ne pouvez pas avoir des choses comme :
mais si vous avez un élément supplémentaire à l'extérieur de la table, il crash avec un
java.lang.IllegalStateException: ScrollView can host only one direct child
exemple
Espérons que cette aide.
OriginalL'auteur Dax
Je sais que cette question est assez vieux, mais j'ai rencontré le même problème et il finissent par être que vous ne pouvez pas avoir un
ScrollView
comme vous l'affichage de base de la mise en page.Juste envelopper la Scrollview dans votre tracker.xml mise en page avec un
RelativeLayout
et vous devriez être bon d'allerOriginalL'auteur tyczj
Vous devez ajouter LinearLayout dans le ScrollView, il va travailler.
OriginalL'auteur nobjta_9x_tq
Une autre possibilité est que l'élément de fermeture n'est pas de correspondance. C'est à dire.
L'erreur est dans la dernière ligne.
OriginalL'auteur MovGP0
Euh... ne pas placer de multiples points de vue à l'intérieur d'un rouleau de vue. Mettre une vue unique à l'intérieur de celle-ci est le genre de modèle que vous souhaitez pour vos points de vue multiples -- TableLayout, FrameLayout, etc.
Je ne pense pas que vous lisez son exemple...
Si l'exception se passe, vous obtenez des points de vue multiples dans le défilement de la vue. Pourquoi? Il a ajouté une exception ci-dessous. Apparemment, il est l'ajout d'un fragment de la vue de la hiérarchie à un défilement de l'affichage.
OriginalL'auteur hackbod
modifier (2e réponse):
J'ai été jouer avec le code et je ne suis toujours pas sûr de savoir POURQUOI cela se produit, certainement il ya quelque chose de mal sur le fragment manager quand il permutation des fragments (remplacer(resId, fragment))
Dans mon fragment onCreateView a ce code:
post_fragment est une toile vierge avec 1 ScrollView, 1 LinearLayout à l'intérieur, et quelques autres ViewGroups à l'intérieur. C'est pour charger une toile vierge sur la 1ère charge (l'élément n'est nulle) et sur la 2ème fois, à travers une entrée de l'utilisateur, il serait d'obtenir les données réelles pour montrer.
pour une raison quelconque au-delà de mes connaissances, comme on le voit dans le logcat, FragmentManagerImpl.moveToState appelait le ScrollView.AddChild l'origine de l'erreur.
Maintenant j'ai changé mes fragments onCreateView:
de sorte que le "vide" de la toile est un FrameLayout avec rien sur elle, et maintenant tout est un bonheur de travailler.
Je suis sûr que cela ressemble à une étrange erreur sur la réalité des fragments de cadre, mais c'est un travail autour d'elle.
1ère réponse:
Raptrex, aussi loin que je peux voir. Oui, que la disposition de la table est le seul enfant de votre scrowview ont. Je rencontre exactement le même problème, et très frustré d'essayer de le résoudre.
De la LogCat/Debug, il semble qu'il y a quelque chose dans le gestionnaire de Fragments qui appelle et .AddView(vue) dans mon ScrollView (consulter le journal), il dépend de la façon dont j'ai changer mon XML de mise en page, j'obtiens cette erreur ou pas, disons que ça a l'air assez absurde!
Toutes les idées de comment?pourquoi?quoi? Je suis à l'écoute...
OriginalL'auteur Budius
Essayez d'utiliser un
<FrameLayout>
au lieu de la<fragment>
dans votre main.xmlAinsi, au lieu de
utilisation
Il a résolu un problème similaire avec le ScrollView, où j'ai été de remplacer le fragment de l'activité:
OriginalL'auteur Devenias
Je suis atteint de ce problème la semaine dernière, puis de trouver la meilleure réponse possible à ce problème.
OriginalL'auteur Sohaib Aslam
De l'emballage de tous les enfants à l'intérieur d'un autre LinearLayout avec wrap_content pour la largeur et la hauteur ainsi que l'orientation verticale.
Comme :
J'espère que ça va vous aider ..!
OriginalL'auteur Viral Patel