Zugriff auf TableLayout durch ScrollView

  • Antworten:5
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 45

11.10.2014, 21:55:57 via Website

Hallo Leute,

ich habe momentan ein Problem mit der Einbindung eines Scrollviews.
Hier das Layout:

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

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/TableLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:shrinkColumns="*"
android:stretchColumns="*">

<TableRow
    android:id="@+id/TableNameRow"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:gravity="center_horizontal">
    <TextView
        android:id="@+id/TableName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:typeface="serif"
        android:textSize="18dp"
        android:text="Vertretungsplan"
        android:gravity="center"
        android:layout_span="5"></TextView>
</TableRow>
<TableRow
    android:id="@+id/TableCategoryRow"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
    <TextView
        android:id="@+id/TableCategory1"
        android:text="Klasse"
        android:textStyle="bold"
        android:typeface="serif"></TextView>
    <TextView
        android:id="@+id/TableCategory2"
        android:text="Vertretung"
        android:textStyle="bold"
        android:typeface="serif"></TextView>
    <TextView
        android:id="@+id/TableCategory3"
        android:text="Fach"
        android:textStyle="bold"
        android:typeface="serif"></TextView>
    <TextView
        android:id="@+id/TableCategory4"
        android:text="Raum"
        android:textStyle="bold"
        android:typeface="serif"></TextView>
    <TextView
        android:id="@+id/TableCategory5"
        android:text="Stunde"
        android:textStyle="bold"
        android:typeface="serif"></TextView>
</TableRow>

</TableLayout>
</ScrollView>

Hier der Code:

View rootView = inflater.inflate(R.layout.vertretungs_fragment, container, false);
    TableLayout table = (TableLayout)rootView.findViewById(R.id.TableLayout);
    Context context = table.getContext();

    for (String[] Vertretung : Vertretungen) {
        TableRow row = new TableRow(context);

        TextView Klasse = new TextView(context);
        Klasse.setText(Vertretung[0]);
        row.addView(Klasse);

        TextView Vertretungslehrer = new TextView(context);
        Vertretungslehrer.setText(Vertretung[1]);
        row.addView(Vertretungslehrer);

        TextView Fach = new TextView(context);
        Fach.setText(Vertretung[2]);
        row.addView(Fach);

        TextView Raum = new TextView(context);
        Raum.setText(Vertretung[3]);
        row.addView(Raum);

        TextView Stunde = new TextView(context);
        Stunde.setText(Vertretung[4]);
        row.addView(Stunde);

        table.addView(row);
    }

Früher hatte ich es so:

TableLayout table = (TableLayout)rootView;

Da ging alles.
Nun brauche ich aber das TableLayout, aber das hier geht anscheinend nicht wie gewollt:

TableLayout table = (TableLayout)rootView.findViewById(R.id.TableLayout);

Hat einer eine Idee?

Mfg
Daniel

— geändert am 11.10.2014, 21:56:14

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.10.2014, 21:57:51 via Website

Bekommst du denn irgend einen Fehler in LogCat?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 45

11.10.2014, 22:18:11 via Website

Ja, den habe ich ganz vergessen. Hier:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.view.ViewGroup.addViewInner(ViewGroup.java:3562)
        at android.view.ViewGroup.addView(ViewGroup.java:3415)
        at android.view.ViewGroup.addView(ViewGroup.java:3360)
        at android.view.ViewGroup.addView(ViewGroup.java:3336)
        at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:946)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
        at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482)
        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
        at android.view.View.measure(View.java:16521)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
        at android.view.View.measure(View.java:16521)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:16521)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:16521)
        at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:762)
        at android.view.View.measure(View.java:16521)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
        at android.view.View.measure(View.java:16521)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:16521)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
        at android.view.View.measure(View.java:16521)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2552)
        at android.view.View.measure(View.java:16521)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1915)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5603)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
        at android.view.Choreographer.doCallbacks(Choreographer.java:574)
        at android.view.Choreographer.doFrame(Choreographer.java:544)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5139)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
        at dalvik.system.NativeStart.main(Native Method)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.10.2014, 14:29:39 via Website

Hallo,
ich nehme an, du musst erst die ScrollView by id finden und in der ScrollView dann dein TableLayout.
Ist aber nur eine Vermutung...
Warum hat dir der 1. Code mit dem Casten zum TablLayout nicht gereicht?
Theoretisch dürfte das auch nicht funktionieren.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 45

12.10.2014, 17:09:43 via Website

Wenn der Vertretungsplan nicht ganz auf den Bildschirm passt, war er abgeschnitten. Deswegen brauche ich ein ScrollView.
Ich habe es heute Vormittag gelöst. Ich bin momentan nicht Zuhause. Den Code schreibe ich später. Ich habe es ungefähr so gelöst:
Erst hole ich mir das TableLayout über die ID, dann entferne ich das vom rootView, füge meine Vertretungen hinzu und dann füge ich es wieder zum rootView hinzu. Das funktioniert ohne Probleme. Der Code kommt, wie gesagt, später.

Antworten
Gelöschter Account
  • Forum-Beiträge: 45

12.10.2014, 19:40:30 via Website

View rootView = inflater.inflate(R.layout.vertretungs_fragment, container, false);
    Context context = rootView.getContext();

    ScrollView scrollView = (ScrollView)rootView;
    TableLayout tableLayout = (TableLayout)rootView.findViewById(R.id.TableLayout);

    for (String[] Vertretung : Vertretungen) {
        TableRow row = new TableRow(context);

        TextView Klasse = new TextView(context);
        Klasse.setText(Vertretung[0]);
        row.addView(Klasse);

        TextView Vertretungslehrer = new TextView(context);
        Vertretungslehrer.setText(Vertretung[1]);
        row.addView(Vertretungslehrer);

        TextView Fach = new TextView(context);
        Fach.setText(Vertretung[2]);
        row.addView(Fach);

        TextView Raum = new TextView(context);
        Raum.setText(Vertretung[3]);
        row.addView(Raum);

        TextView Stunde = new TextView(context);
        Stunde.setText(Vertretung[4]);
        row.addView(Stunde);

        scrollView.removeView(tableLayout);
        tableLayout.addView(row);
        scrollView.addView(tableLayout);
    }

Antworten