2012-03-26 2 views
1

Я пытаюсь создать пользовательские вкладки, используя this. Но когда я пытаюсь создать экземпляр TextView из надутого макета и использовать его как вид в моем TabHost.TabSpec, я получаюПользовательские вкладки «Указанный ребенок уже имеет родителя»

«Необработанное исключение:

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

Main.cs

public class Main : TabActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     SetContentView(Resource.Layout.Main); 

     Intent[] intents = new Intent[3]; 
     intents[0] = new Intent(this, typeof(Inspection)).PutExtra("Name", "Inspection"); 
     intents[1] = new Intent(this, typeof(Transfer)).PutExtra("Name", "Transfer"); 
     intents[2] = new Intent(this, typeof(ServiceCalls)).PutExtra("Name", "Service Calls"); 

     foreach (var intent in intents) 
     { 
      intent.AddFlags(ActivityFlags.NewTask); 
      TextView tv = getView(intent.GetStringExtra("Name")); 
      TabHost.TabSpec spec = TabHost.NewTabSpec(intent.GetStringExtra("Name")).SetIndicator(tv).SetContent(intent); 
      TabHost.AddTab(spec); 
     } 

     TabHost.CurrentTab = 0; 
    } 

    private TextView getView(string text) 
    { 
     View v = LayoutInflater.Inflate(Resource.Layout.tabs_bg, (ViewGroup)FindViewById(Android.Resource.Id.Content));    
     TextView tv = (TextView)v.FindViewById(Resource.Id.tabsText); 
     tv.Text = text; 

     return tv; 
    } 
} 

tabs_bg.axml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tabsLayout" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <TextView android:id="@+id/tabsText" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:background ="@drawable/tab_selector" 
    android:textSize="18dip"/> 
</LinearLayout> 

Если я заменяю

TextView tv = (TextView)v.FindViewById(Resource.Id.tabsText); 

в GetView с

TextView tv = new TextView(this); 

Тогда я не получаю эту ошибку. Таким образом, это определенно имеет какое-то отношение к tabsText в tabs_bg, хотя это точно так, как это сделал автор в этом примере.

ответ

3

Пример вы переносите из не возвращает TextView из createTabView, она возвращает LinearLayout. Вы возвращаетесь tv вместо v в getView.

+0

Вот и все. Благодаря! – jmease

0

использование

View v = LayoutInflater.Inflate(Resource.Layout.tabs_bg, null); 
+0

Такое же исключение. – jmease

Смежные вопросы