0

我创建了一个带有三个选项卡的选项卡应用程序。我有一个线性布局,这对于三个选项卡很常见。如果我在所有三个选项卡的顶部添加此线性布局,则第一个选项卡显示线性布局。但我在第二个和第三个选项卡中收到以下错误。

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

如果我要删除子装置,其他选项卡会受到影响。如何在没有 xml 布局的情况下在 java 代码中多次重用线性布局。

编辑1:

    LinearLayout layout = new LinearLayout(this);
    LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    ll.gravity = Gravity.CENTER_HORIZONTAL;
    final AdView adView = new AdView(this, AdSize.SMART_BANNER, "/6253334/dfp_example_ad");
    layout.addView(adView);  
    adView.loadAd(new AdRequest());

我需要在所有三个选项卡中使用此广告布局。

编辑2:

我使用以下代码来创建选项卡内容。

public FrameLayout createTabContent()
  { 
    FrameLayout layout = new FrameLayout(sMainContext);
    FrameLayout.LayoutParams layoutparams=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT,Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);    
    layout.setForegroundGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
    layout.setLayoutParams(layoutparams);       
    mWebView=new WebView(sMainContext);
    mWebView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));

    LinearLayout adlayout = new LinearLayout(sMainContext);
    adLayout = (LinearLayout) (commonAdLayout);

    layout.addView(mWebView);
    layout.addView(adlayout);
    return layout;
}

commonLayout 是从 EDIT 1 创建的。

4

2 回答 2

0

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

如果视图存在,则removeView()在添加视图之前使用

或者你也可以试试removeAllViews()

于 2013-08-18T17:16:29.403 回答
0

您可能正在使用相同的代码(视图)添加到您的布局中。每次循环中都必须创建一个新视图或布局。请参阅此链接:如何多次动态注入 LinearLayout (Android)?

于 2015-07-24T22:58:24.673 回答