Android - Tabhost de travail dans l'Activité de la classe

OK, je dois être donnant sur quelque chose de stupide parce que je n'arrive pas à obtenir mon tabhost à afficher dans ma classe d'Activité. Je suis à la redoutable force de fermeture lorsque j'essaye d'exécuter l'application. Cela fonctionnera si je prolonge TabActivity, mais je ne peux pas faire [voir modifier ci-dessous] car une fois j'ai déplacer le code de mon prototype de projet sa va être dans une classe qui hérite de l'Activité.

Ici est la mise en page XML:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">    
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">        
        <TabWidget 
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />            
        <FrameLayout 
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>
</TabHost>

Et ici est la classe qui est en train d'essayer de créer et d'afficher le TabHost:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TabHost;

public class my_proto extends Activity
{   
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      Log.i(this.toString(), "OnCreate");

      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Log.i(this.toString(), "get tab host");
      TabHost host = (TabHost)findViewById(R.id.tabhost); 
      host.setup();

      Log.i(this.toString(), "add tabs");
      host.addTab(host.newTabSpec("one")
                      .setIndicator("First Results")
                      .setContent(new Intent(this, FirstResultsListViewActivity.class)));

      host.addTab(host.newTabSpec("two")
                      .setIndicator("Second Results")
                      .setContent(new Intent(this, SecondResultsListViewActivity.class)));

      Log.i(this.toString(), "adjust tab size");
      host.getTabWidget().getChildAt(0).getLayoutParams().height = 35;
      host.getTabWidget().getChildAt(1).getLayoutParams().height = 35;

   }//end onCreate

}//end class my_proto

C'est l'erreur que je reçois dans le journal.

11-17 16:49:51.271: INFO/com.my_proto.my_proto@43b80b50(1302): OnCreate
11-17 16:49:51.472: INFO/com.my_proto.my_proto@43b80b50(1302): get tab host
11-17 16:49:51.480: INFO/com.my_proto.my_proto@43b80b50(1302): add tabs
11-17 16:49:51.521: DEBUG/AndroidRuntime(1302): Shutting down VM
11-17 16:49:51.521: WARN/dalvikvm(1302): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
11-17 16:49:51.530: ERROR/AndroidRuntime(1302): Uncaught handler: thread main exiting due to uncaught exception
11-17 16:49:51.552: ERROR/AndroidRuntime(1302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my_proto/com.my_proto.my_proto}: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.os.Looper.loop(Looper.java:123)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.app.ActivityThread.main(ActivityThread.java:4363)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at java.lang.reflect.Method.invokeNative(Native Method)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at java.lang.reflect.Method.invoke(Method.java:521)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at dalvik.system.NativeStart.main(Native Method)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302): Caused by: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:646)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.widget.TabHost.setCurrentTab(TabHost.java:320)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.widget.TabHost.addTab(TabHost.java:213)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at com.mc_proto.mc_proto.onCreate(my_proto.java:29)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
11-17 16:49:51.552: ERROR/AndroidRuntime(1302):     ... 11 more

Sa se plaindre de ne pas appeler le programme d'installation, mais je suis en l'appelant. Il existe une autre version de l'installation qui a besoin d'une sorte de LocalActivityMananger. J'ai essayé de remplacer l'appel à la configuration de l'appel ci-dessous, mais pas de chance.

LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);
host.setup(mLocalActivityManager);

[modifier] L'appel ci-dessus ne fonctionne pas donc je l'ai pris un peu en arrière. Bien que j'ai été faire une nouvelle erreur connecté.

11-17 20:24:58.382: ERROR/AndroidRuntime(1432): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my_proto/com.my_proto.my_proto}: java.lang.IllegalStateException: Activities can't be added until the containing group has been created.

[modifier] Basé sur certains des commentaires ci-dessous j'ai réalisé que j'ai besoin d'être plus clair sur pourquoi je ne peux pas hériter de TabActivity. Une fois que j'ai le prototype de travail j'ai besoin de ce port dans une application existante de l'écran qui hérite de l'Activité. J'ai besoin de charger le TabHost dans une Mise en page à l'intérieur de cette Activité. Il sera essentiellement un LinearLayout avec une rangée d'icônes de statut, puis un LinearLayout avec le Tabhost. Je sais que si je peux obtenir ce travail, je peux passer à la phase suivante. Merci!

---------------------------
|      status icons       |
---------------------------
|    Tab, Tab, Tab        |
|                         |
|                         |
|                         | 
---------------------------
|      status icons       |
---------------------------

OriginalL'auteur bursk | 2010-11-17