2011-08-21 8 views
1

Je pense que j'ai ajouté le code exactement comme il est dit sur le tutoriel de disposition de l'onglet android et corrigé tous les problèmes. L'application semble compiler ok mais quand je l'exécute sur l'émulateur, il dit 'L'application * s'est arrêtée de manière inattendue s'il vous plaît essayez à nouveau'. Voici mes fichiers s'il vous plaît faites le moi savoir si vous voyez un problème avec le code.Tutoriel Android 'HelloTabWidget'

Il existe 4 fichiers d'activité distincts.

package com.example.HelloTabWidget; 


import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.*; 

public class AlbumsActivity extends TabActivity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); // Resource object to get Drawables 
    TabHost tabHost = getTabHost(); // The activity TabHost 
    TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    Intent intent; // Reusable Intent for each tab 

    // Create an Intent to launch an Activity for the tab (to be reused) 
    intent = new Intent().setClass(this, ArtistsActivity.class); 

    // Initialize a TabSpec for each tab and add it to the TabHost 
    spec = tabHost.newTabSpec("artists").setIndicator("Artists", 
         res.getDrawable(R.drawable.ic_tab_artists)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    // Do the same for the other tabs 
    intent = new Intent().setClass(this, AlbumsActivity.class); 
    spec = tabHost.newTabSpec("albums").setIndicator("Albums", 
         res.getDrawable(R.drawable.ic_tab_artists_grey)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, SongsActivity.class); 
    spec = tabHost.newTabSpec("songs").setIndicator("Songs", 
         res.getDrawable(R.drawable.ic_tab_artists_white)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    tabHost.setCurrentTab(2); 
} 



} 

package com.example.HelloTabWidget; 

import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 

public class ArtistsActivity extends TabActivity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); // Resource object to get Drawables 
    TabHost tabHost = getTabHost(); // The activity TabHost 
    TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    Intent intent; // Reusable Intent for each tab 

    // Create an Intent to launch an Activity for the tab (to be reused) 
    intent = new Intent().setClass(this, ArtistsActivity.class); 

    // Initialize a TabSpec for each tab and add it to the TabHost 
    spec = tabHost.newTabSpec("artists").setIndicator("Artists", 
         res.getDrawable(R.drawable.ic_tab_artists)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    // Do the same for the other tabs 
    intent = new Intent().setClass(this, AlbumsActivity.class); 
    spec = tabHost.newTabSpec("albums").setIndicator("Albums", 
         res.getDrawable(R.drawable.ic_tab_artists_grey)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, SongsActivity.class); 
    spec = tabHost.newTabSpec("songs").setIndicator("Songs", 
         res.getDrawable(R.drawable.ic_tab_artists_white)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    tabHost.setCurrentTab(2); 
} 

} 


package com.example.HelloTabWidget; 

import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 

public class HelloTabWidget extends TabActivity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); // Resource object to get Drawables 
    TabHost tabHost = getTabHost(); // The activity TabHost 
    TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    Intent intent; // Reusable Intent for each tab 

    // Create an Intent to launch an Activity for the tab (to be reused) 
    intent = new Intent().setClass(this, ArtistsActivity.class); 

    // Initialize a TabSpec for each tab and add it to the TabHost 
    spec = tabHost.newTabSpec("artists").setIndicator("Artists", 
         res.getDrawable(R.drawable.ic_tab_artists)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    // Do the same for the other tabs 
    intent = new Intent().setClass(this, AlbumsActivity.class); 
    spec = tabHost.newTabSpec("albums").setIndicator("Albums", 
         res.getDrawable(R.drawable.ic_tab_artists_grey)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, SongsActivity.class); 
    spec = tabHost.newTabSpec("songs").setIndicator("Songs", 
         res.getDrawable(R.drawable.ic_tab_artists_white)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    tabHost.setCurrentTab(2); 
}} 




package com.example.HelloTabWidget; 


import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 

public class SongsActivity extends TabActivity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); // Resource object to get Drawables 
    TabHost tabHost = getTabHost(); // The activity TabHost 
    TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    Intent intent; // Reusable Intent for each tab 

    // Create an Intent to launch an Activity for the tab (to be reused) 
    intent = new Intent().setClass(this, ArtistsActivity.class); 

    // Initialize a TabSpec for each tab and add it to the TabHost 
    spec = tabHost.newTabSpec("artists").setIndicator("Artists", 
         res.getDrawable(R.drawable.ic_tab_artists)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    // Do the same for the other tabs 
    intent = new Intent().setClass(this, AlbumsActivity.class); 
    spec = tabHost.newTabSpec("albums").setIndicator("Albums", 
         res.getDrawable(R.drawable.ic_tab_artists_grey)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, SongsActivity.class); 
    spec = tabHost.newTabSpec("songs").setIndicator("Songs", 
         res.getDrawable(R.drawable.ic_tab_artists_white)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    tabHost.setCurrentTab(2); 
}} 

Ce sont les artistes fichier xml dans res/étirables (les images sont présentes dans res/étirables ainsi)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- When selected, use grey --> 
<item android:drawable="@drawable/ic_tab_artists_grey" 
     android:state_selected="true" /> 
<!-- When not selected, use white--> 
<item android:drawable="@drawable/ic_tab_artists_white" /> 
</selector> 

C'est le main.xml

<?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="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp"> 
    <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" 
     android:padding="5dp" /> 
</LinearLayout> 
</TabHost> 

cette est le fichier manifeste android

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.HelloTabWidget" android:versionCode="1" 
android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="7" /> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
<activity android:name=".HelloTabWidget" android:label="@string/app_name" 
android:theme="@android:style/Theme.NoTitleBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity android:name=".AlbumsActivity" android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar"> 

</activity> 
<activity android:name=".ArtistsActivity" android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar"> 

</activity> 
<activity android:name=".SongsActivity" android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar"> 

</activity> 
</application> 


</manifest> 

J'ai passé des temps à chercher des fautes de frappe et je n'ai rien trouvé, j'ai aussi passé des heures à chercher sur les forums et rien ne semble vraiment expliquer pourquoi cela ne fonctionne pas - je suis nouveau à ce sujet comprendre les réponses mais je ne pense pas que c'est.

+0

la meilleure idée serait de donner la sortie logcat et aussi la ligne qui vous donne l'exception. –

Répondre

1

Au moment toutes vos classes de Activity.java sont exactement les mêmes que le HelloTabWidget.java qu'ils ne devraient probablement pas

Essayez:

HelloTabWidget.java

package com.example.HelloTabWidget; 

import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 

public class HelloTabWidget extends TabActivity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); 
    TabHost tabHost = getTabHost(); 

    tabHost.addTab(tabHost.newTabSpec("artists").setIndicator("Artists",res.getDrawable(R.drawable.ic_tab_artists)).setContent(new Intent(this, ArtistsActivity.class))); 
    tabHost.addTab(tabHost.newTabSpec("albums").setIndicator("Albums",res.getDrawable(R.drawable.ic_tab_artists)).setContent(new Intent(this, AlbumsActivity.class))); 
    tabHost.addTab(tabHost.newTabSpec("songs").setIndicator("Songs",res.getDrawable(R.drawable.ic_tab_artists)).setContent(new Intent(this, SongsActivity.class))); 

    tabHost.setCurrentTab(2); 
    } 
} 

ArtistsActivity.java

package com.example.HelloTabWidget; 

import android.app.Activity; 
import android.os.Bundle; 


public class ArtistsActivity extends Activity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.artistslayout); 

    // your code for this activity ... (not the same as HelloTabWidget.java) 


    } 
} 

Et pareil pour les 2 autres classes d'activités.

+0

pour ajouter une explication: HelloTabWidget.java s'exécute au lancement de votre application tel que défini dans votre AndroidManifest.xml. Ce HelloTabWidget.java initialise ensuite les onglets et crée les activités (intents) qui s'exécutent dans vos différents onglets. Cette étape ne doit pas être répétée dans chacune de vos activités. – dirkboye

+0

Salut, merci pour la suggestion mais cela n'a pas fonctionné. J'ai changé le fichier HelloTabWIdget.java pour votre suggestion et changé le code dans les autres activités juste pour un textview mais le message est toujours qu'il y a une erreur et l'application doit forcer la fermeture. J'ai aussi essayé avec mon code précédent dans le fichier HelloTabWidget.java et juste un textview pour la méthode onCreate pour les autres activités et toujours pas de chance. Avez-vous d'autres suggestions? Désolé, je suis nouveau. – Wes3985

+0

J'ai eu une petite erreur de copier et coller dans ma réponse. L'ArtistsActivity (+2 autres) doit étendre l'activité standard et vous devez utiliser des mises en page différentes de la mise en page principale. J'ai téléchargé l'exemple de travail complet sur http://www.boye.ch/HelloTabExample.zip – dirkboye