Android-ScrollView kann nur als host für eine direkte Kind
Habe ich ein onclick-listener aus der Galerie, sollten deaktivieren Sie alle Zeilen in der tableview, dann fügen Sie die Zeile/Zeilen eines tableviews innerhalb einer scrollview. Das fragment sollte sich ändern, auf jeden Knopf klicken.
Jedoch bin ich immer: java.lang.IllegalStateException: ScrollView kann nur als host für eine direkte Kind.
myactivity-Taste Hörer
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>
Weiß jemand, was ist falsch? Ich vermute, ich bin das hinzufügen einer Zeile in der Tabelle zu den scrollview und nicht der tableview, aber ich sehe nicht, wo ich das Tue, falsch in meinem code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Tat, können Sie nicht haben, Dinge wie :
aber wenn Sie ein extra-element außerhalb der Tabelle, es crash mit einem
java.lang.IllegalStateException: ScrollView can host only one direct child
Beispiel
Hoffe, dass dies helfen.
Ich weiß, diese Frage ist ziemlich alt, aber ich lief in das gleiche problem haben und es am Ende wird, dass Sie nicht über eine
ScrollView
wie Sie Basis-Ansicht für das layout.Nur wickeln Sie den Scrollview in Ihrem tracker.xml layout mit einem
RelativeLayout
und Sie sollten gut zu gehenSollten Sie LinearLayout in ScrollView, es wird funktionieren.
Andere Möglichkeit ist, dass das schließende element ist nicht passend. Dh.
Der Fehler ist in der letzten Zeile.
Ähm... nicht mehrere Ansichten innerhalb einer scroll-Ansicht. Setzen Sie einen einzigen Blick in dass es ist die Art von layout, das Sie möchten für Ihre mehrere Ansichten -- TableLayout, FrameLayout, etc.
Bearbeiten (2. Antwort):
Ich habe das Spiel mit dem code und ich bin mir immer noch nicht sicher, WARUM dies geschieht, da es definitiv etwas falsch in der fragment-manager, wenn es swappen Fragmente (ersetzen(resId, fragment))
In meinem fragment onCreateView war dieser code:
post_fragment ist eine leere Leinwand mit 1 ScrollView, 1 LinearLayout drin, und einige andere ViewGroups drin. Dieses ist zum laden einer leeren Leinwand, auf der 1. Belastung (item null ist) und auf der 2. Zeit, durch die Eingabe eines Benutzers, wäre es die eigentlichen Daten zu zeigen.
aus irgendeinem Grund entzieht sich meiner Kenntnis, wie man im logcat, FragmentManagerImpl.moveToState Berufung war ScrollView.AddChild den Fehler verursacht.
Nun änderte ich meine Fragmente onCreateView zu:
so, dass die "leeren" Leinwand ist ein FrameLayout mit nichts drauf, und jetzt funktioniert alles glücklich.
Ich bin sicher, das klingt wie einige seltsame Fehler auf die tatsächliche Fragmente framework, aber es ist eine Arbeit um Sie herum.
1. Antwort:
Raptrex, soweit ich das sehen kann. Ja, das Tisch-layout ist das einzige Kind Ihrer scrowview haben. Ich habe genau das gleiche problem, und sehr frustriert versucht, es zu lösen.
Aus der LogCat/Debug, scheint es, dass es etwas in den Fragmenten manager, die aufrufen und .AddView(view) in mein ScrollView (überprüfen Sie die log -) es hängt davon ab, wie ich mein XML-layout bekomme ich diesen Fehler oder nicht, was wir sagen, klingt ziemlich absurd!
Irgendwelche Ideen, wie?warum?was? Ich höre...
Versuchen, eine
<FrameLayout>
statt der<fragment>
in Ihrem main.xmlAlso statt
verwenden
Es löste ein ähnliches problem mit der ScrollView, wo ich war, ersetzen das fragment aus der Tätigkeit mit:
Leide ich unter diesem problem Letzte Woche und dann finden Sie das best mögliche Antwort auf dieses problem.