2012-03-24 83 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