2012-03-24 86 views
0

我正在創建一個新的android application.i使用表格佈局。我編碼如下,但是當我運行該程序時,它顯示強制關閉程序。 任何人可以幫助這個代碼。java中的表格佈局

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 
+1

添加您的logcat ... – 2012-03-24 09:11:42

+0

請提供堆棧跟蹤。 – 2012-03-24 09:11:56

+0

也添加你的佈局定義。 – 2012-03-24 09:12:33

回答

1

的看法鰭加入第一個錶行(RW1)和你想再次將它添加到第二個表格行(rw2)。這就是爲什麼你會得到一個錯誤。 這個視圖已經有一個家長。

+0

當我改變它與其他視圖,然後它也顯示錯誤警告:活動未啓動,其當前任務已被帶到前臺它正在強制關閉 – Ashishsingh 2012-03-24 09:30:08

+0

嘗試評論setContentView(d);你還有錯誤嗎?並且請將其更改爲另一個視圖,請勿將查看子項分配給多個父母。這是不正確的。 – Radu 2012-03-24 09:32:30

+0

是的,我仍然得到那個錯誤 – Ashishsingh 2012-03-24 09:38:30

0

好的,rw1和rw2在您的xml文件中已經有父項,您不能將它們添加到其他容器中。不要通過代碼和xml混合小部件定位。 xml是真正的標準,只有少數動態定位需要編程式佈局。

從一個更簡單的例子開始,只使用xml來構建你的UI。

@Radu,我發現因爲線(找到這裏的字)

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) 

此行是你的最上一行的錯誤。那是錯誤所在。 您獲得的錯誤的性質包含在我複製的第一行中。 這就是堆棧跟蹤的工作方式。

+0

我想在我的頁面創建兩行,其中一行將顯示一些圖片,其他將顯示三維圖像這兩件事情都將通過自定義view.that這就是爲什麼我使用兩行,但它不工作? – Ashishsingh 2012-03-24 09:44:51

0

您試圖添加一個已經有父視圖的視圖,首先需要通過在父視圖上使用removeView()來移除父視圖。

堆棧跟蹤非常清晰。

java.lang.IllegalStateException:指定的子項已經有父項。您必須先調用子對象的父對象的removeView()。

+0

如何使用remove view()? – Ashishsingh 2012-03-24 09:37:51