макет таблицы в Java - PullRequest
       1

макет таблицы в Java

0 голосов
/ 24 марта 2012

Я создаю новое приложение для Android. Я использую макет таблицы.Я закодировал как следовать, но когда я запускаю программу, это показывает силу, чтобы закрыть программу.Может ли кто-нибудь помочь с этим кодом.

public  class SongsActivity extends Activity{

    DemoView demoview ;
    DemoView2 finalview;
    DemoView3 dview;
    DemoView4 deview;

    ViewFlipper c ;
    TableLayout d;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.songs_layout);
        demoview = new DemoView(this);
        finalview = new DemoView2(this);
        dview= new DemoView3(this);
        deview = new DemoView4(this);
         d= new TableLayout(this);


        c=(ViewFlipper)findViewById(R.id.viewFlipper1);
        c.addView(demoview,0);
        c.addView(finalview, 1);
        c.addView(dview, 2);
        c.addView(deview, 3);
        c.setAutoStart(true);
        c.setFlipInterval(500);
        c.startFlipping();



        TableRow rw1=new TableRow(this);
         TableRow rw2=new TableRow(this);
         TableRow.LayoutParams params = new TableRow.LayoutParams();  
         params.span = 6;
        rw1.addView(c);
        rw2.addView(c);
        d.addView(rw2);
        d.addView(rw1);
        setContentView(d);
    } 

мой макет определяется следующим образом

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1">

<TableRow
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
    android:id="@+id/tableRow1">

    <!-- Screen Design for the SONGS -->
<ViewFlipper android:id="@+id/viewFlipper1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" >
  </ViewFlipper>

</TableRow>

<TableRow

  android:orientation="vertical"
    android:id="@+id/tableRow2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

</TableRow>
</TableLayout>

мой logcat показывает следующую ошибку

03-24 14:33:50.722: E/AndroidRuntime(322): FATAL EXCEPTION: main
03-24 14:33:50.722: E/AndroidRuntime(322): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidtablayout/com.example.androidtablayout.SongsActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.widget.TabHost.setCurrentTab(TabHost.java:323)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.View.performClick(View.java:2408)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.View$PerformClick.run(View.java:8816)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.os.Handler.handleCallback(Handler.java:587)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.os.Looper.loop(Looper.java:123)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.app.ActivityThread.main(ActivityThread.java:4627)
03-24 14:33:50.722: E/AndroidRuntime(322):  at java.lang.reflect.Method.invokeNative(Native Method)
03-24 14:33:50.722: E/AndroidRuntime(322):  at java.lang.reflect.Method.invoke(Method.java:521)
03-24 14:33:50.722: E/AndroidRuntime(322):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-24 14:33:50.722: E/AndroidRuntime(322):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-24 14:33:50.722: E/AndroidRuntime(322):  at dalvik.system.NativeStart.main(Native Method)
03-24 14:33:50.722: E/AndroidRuntime(322): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.ViewGroup.addViewInner(ViewGroup.java:1970)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.ViewGroup.addView(ViewGroup.java:1865)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.ViewGroup.addView(ViewGroup.java:1822)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.ViewGroup.addView(ViewGroup.java:1802)
03-24 14:33:50.722: E/AndroidRuntime(322):  at com.example.androidtablayout.SongsActivity.onCreate(SongsActivity.java:51)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-24 14:33:50.722: E/AndroidRuntime(322):  ... 18 more

Ответы [ 3 ]

1 голос
/ 24 марта 2012

Флиппер представления был добавлен в первую строку таблицы (rw1), и вы пытаетесь добавить его снова во вторую строку таблицы (rw2).Вот почему вы получаете ошибку.У этого представления уже есть родитель.

0 голосов
/ 24 марта 2012

Вы пытаетесь сначала добавить представление, у которого уже есть родительское представление. Вам необходимо удалить родительское представление с помощью removeView () в родительском представлении.

Трассировка стека довольно четкая.

java.lang.IllegalStateException: указанный дочерний элемент уже имеет родителя. Сначала вы должны вызвать removeView () у родителя ребенка.

0 голосов
/ 24 марта 2012

Хорошо, у rw1 и rw2 уже есть родительский элемент в вашем XML-файле, вы не можете добавить его в другой контейнер. Не смешивайте позиционирование виджетов по коду и XML. На самом деле xml является стандартом, и только несколько динамических позиционирований нуждаются в программной компоновке.

Начните с более простого примера и используйте только XML для создания своего пользовательского интерфейса.

@ Раду и я нашли ошибку из-за строки (найдите ЗДЕСЬ слово)

Caused by: java.lang.IllegalStateException: The specified child already has a parent.     You must call removeView() on the child's parent first.
03-24 14:33:50.722: E/AndroidRuntime(322):  at     android.view.ViewGroup.addViewInner(ViewGroup.java:1970)
03-24 14:33:50.722: E/AndroidRuntime(322):  at     android.view.ViewGroup.addView(ViewGroup.java:1865)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.ViewGroup.addView(ViewGroup.java:1822)
03-24 14:33:50.722: E/AndroidRuntime(322):  at android.view.ViewGroup.addView(ViewGroup.java:1802)
 ----> HERE  03-24 14:33:50.722: E/AndroidRuntime(322):  at     com.example.androidtablayout.SongsActivity.onCreate(SongsActivity.java:51)

Эта строка самая верхняя из ваших. Это где ошибка лежит. Характер полученной ошибки содержится в первой строке, которую я скопировал. Так работает трассировка стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...