2012-05-25 4 views
0

Je continue d'obtenir cette erreur en cours d'exécution mais pas d'erreurs de compilation? voici le logcat et le code pour main.Mise en page d'onglet verticale Android

05-25 12:29:25.543: W/dalvikvm(384): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
05-25 12:29:25.582: E/AndroidRuntime(384): FATAL EXCEPTION: main 
05-25 12:29:25.582: E/AndroidRuntime(384): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tablayout/com.example.tablayout.TablayoutActivity}: java.lang.NullPointerException 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.os.Looper.loop(Looper.java:123) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-25 12:29:25.582: E/AndroidRuntime(384): at java.lang.reflect.Method.invokeNative(Native Method) 
05-25 12:29:25.582: E/AndroidRuntime(384): at java.lang.reflect.Method.invoke(Method.java:521) 
05-25 12:29:25.582: E/AndroidRuntime(384): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-25 12:29:25.582: E/AndroidRuntime(384): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-25 12:29:25.582: E/AndroidRuntime(384): at dalvik.system.NativeStart.main(Native Method) 
05-25 12:29:25.582: E/AndroidRuntime(384): Caused by: java.lang.NullPointerException 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.Activity.setContentView(Activity.java:1647) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.TabActivity.ensureTabHost(TabActivity.java:114) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.TabActivity.getTabHost(TabActivity.java:136) 
05-25 12:29:25.582: E/AndroidRuntime(384): at com.example.tablayout.TablayoutActivity.<init>(TablayoutActivity.java:15) 
05-25 12:29:25.582: E/AndroidRuntime(384): at java.lang.Class.newInstanceImpl(Native Method) 
05-25 12:29:25.582: E/AndroidRuntime(384): at java.lang.Class.newInstance(Class.java:1429) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
05-25 12:29:25.582: E/AndroidRuntime(384): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
05-25 12:29:25.582: E/AndroidRuntime(384): ... 11 more 






    <?xml version="1.0" encoding="utf-8"?> 
    <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@android:id/tabhost" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
    <LinearLayout android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:baselineAligned="false"> 
    <FrameLayout android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="0.2"> 
    <TabWidget android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:visibility="invisible"/> 
     <LinearLayout android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical"> 
      <Button android:layout_height="0dip" 
       android:layout_width="fill_parent" 
       android:layout_weight="1.0" 
      android:background="@drawable/icon_photos_tab"    
       android:id="@+id/artist_id" 
       android:onClick="tabHandler"/> 
      <Button android:layout_height="0dip" 
       android:layout_width="fill_parent" 
       android:layout_weight="1.0" 
      android:background="@drawable/icon_videos_tab" 
       android:id="@+id/album_id" 
       android:onClick="tabHandler"/> 
      <Button android:layout_height="0dip" 
       android:layout_width="fill_parent" 
       android:layout_weight="1.0" 
      android:background="@drawable/icon_songs_tab" 
       android:id="@+id/song_id" 
       android:onClick="tabHandler"/> 
    </LinearLayout> 
    </FrameLayout>  
    <FrameLayout 
    android:id="@android:id/tabcontent" 
    android:layout_width="0dip" 
    android:layout_height="fill_parent" 
    android:layout_weight="0.8"/> 
    </LinearLayout> 
    </TabHost> 

Voici le fichier main.java, de cette façon vous pouvez voir comment c'était une variable globale et où je l'ai retiré. Aussi ajouté les boutons globalement au lieu de localement à cet endroit.

import android.app.TabActivity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.TabHost; 
    import android.widget.TabHost.TabSpec; 

    public class TablayoutActivity extends TabActivity { 
    /** Called when the activity is first created. */ 

Button artistButton, songButton, videosButton; 
TabHost tabHost = getTabHost(); 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //TabHost tabHost = getTabHost(); 

    // Tab for Photos 
    TabSpec photospec = tabHost.newTabSpec("Photos"); 
    // setting Title and Icon for the Tab 
    photospec.setIndicator("Photos", getResources().getDrawable(R.drawable.icon_photos_tab)); 
    Intent photosIntent = new Intent(this, PhotosActivity.class); 
    photospec.setContent(photosIntent); 

    // Tab for Songs 
    TabSpec songspec = tabHost.newTabSpec("Songs"); 
    songspec.setIndicator("Songs", getResources().getDrawable(R.drawable.icon_songs_tab)); 
    Intent songsIntent = new Intent(this, SongsActivity.class); 
    songspec.setContent(songsIntent); 

    // Tab for Videos 
    TabSpec videospec = tabHost.newTabSpec("Videos"); 
    videospec.setIndicator("Videos",   getResources().getDrawable(R.drawable.icon_videos_tab)); 
    Intent videosIntent = new Intent(this, VideosActivity.class); 
    videospec.setContent(videosIntent); 

    // Adding all TabSpec to TabHost 
    tabHost.addTab(photospec); // Adding photos tab 
    tabHost.addTab(songspec); // Adding songs tab 
    tabHost.addTab(videospec); // Adding videos tab 




    } 

    public void tabHandler(View target){ 
    artistButton.setSelected(false); 
    videosButton.setSelected(false); 
    songButton.setSelected(false); 
    if(target.getId() == R.id.artist_id){ 
     tabHost.setCurrentTab(0); 
     artistButton.setSelected(true); 
    } else if(target.getId() == R.id.album_id){ 
     tabHost.setCurrentTab(1); 
     videosButton.setSelected(true); 
    } else if(target.getId() == R.id.song_id){ 
     tabHost.setCurrentTab(2); 
     songButton.setSelected(true); 
    } 
    }; 

    } 
+0

Essayez de vous nettoyer le projet. – Demonick

+0

nettoyé, fermé adb, et a même essayé de fonctionner sur mon téléphone en tant qu'émulateur. toujours pas de chance et les ddms s'allument plus rouge qu'avant le nettoyage. –

+0

Bon travail de nettoyage de la trace d'exception, soit dit en passant. – jkschneider

Répondre

1

Vous essayez probablement d'appeler getTabHost() quelque part dans votre constructeur ou à mettre un champ de votre classe. Vous devez l'appeler à partir de onCreate() puisque getTabHost() descend profondément essaie d'obtenir la fenêtre courante, qui n'est pas encore créée au moment du constructeur.

Tout le temps après onCreate() a été appelé ira bien.

+0

ouais j'ai fait le getTabHost une variable globale, il n'a pas montré d'erreurs mais quand je n'ai pas je reçois une erreur qui ne me permet pas d'y accéder avec les onglets que j'ai. Dois-je utiliser un gestionnaire onclick au lieu de ce qui est là. –

+0

Peut-être que de voir votre code nous aiderait à comprendre un peu plus. Vous pouvez assigner getTabHost() à une variable globale, ne l'attribuez pas avant ou après onCreate(). Bien sûr, il n'y aura rien de syntaxiquement erroné à cela, donc vous ne verrez aucune erreur en soi. – jkschneider

+0

J'ai mis à jour le code pour que vous puissiez voir de quoi je parlais, j'ai même commenté où j'ai changé la variable getTabHost –