Jump to content

[TUTO]: les Onglets


Sylvain-a

Recommended Posts

Problème de sylvain résolu et le tuto est posté au post #13

(Edit Profete162)

Bonjour,

Je suis tout nouveau dans cette communauté et sur Android (J'ai acquis mon Desire il y'a quelques jours ^^)

Donc, comme tout bon nouveau programmeur sur Android, j'ai tenté de réaliser des onglets. Et malgrès de nomvreux essais (j'y suis depuis ce matin 9h), lors du lancement de l'application, l'émulateur met dit "Sorry the application...has stopped unexpectedly. Please try again".

Au tout début j'essayais de faire quelque chose de personnalisé, mais maintenant j'essaie simplement de faire marcher le code qui est dans le guide du développeur, donné par Google. J'ai même corrigé les erreurs qui y sont (à savoir l'ajout de 3 dans le manifest ainsi que tabHost.setCurrentTab(0) à la place de celui avec le getIntent();

Malgré de nombreuses recherches, je reste en échec.... Je me tourne donc vers vous, avant d'envisager de me pendre ^^.

Voici les divers codes (Je précise que c'est du pur copier coller de google, mis à part les corrections d'erreur) :

la classe principale héritant de TabActivity

package test.hello;

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 {

/** Called when the activity is first created. */

@Override

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_albums)).setContent(intent);

TabHost.addTab(spec);

intent = new Intent().setClass(this, SongsActivity.class);

spec = tabHost.newTabSpec("songs").setIndicator("Songs", res.getDrawable(R.drawable.ic_tab_songs)).setContent(intent);

tabHost.addTab(spec);

tabHost.setCurrentTab(0);

}

}

le manifest.xml

package="test.hello"

android:versionCode="1"

android:versionName="1.0">

android:label="@string/app_name">

android:label="@string/a_name">

android:label="@string/b_name">

android:label="@string/c_name">

<?xml version="1.0" encoding="utf-8"?>

android:id="@android:id/tabhost"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="5dp">

android:id="@android:id/tabs"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

android:id="@android:id/tabcontent"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="5dp" />

Le code type que j'ai mis pour chaque activity

package test.hello;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class AlbumsActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView txt=new TextView(this);

txt.setText("hola tata");

setContentView(txt);

}

}

Je vous remercie par avance pour vote aide

Link to comment
Share on other sites

Juste un petit truc avant de passer 10 minutes à lire ton code...

Une copie de l'erreur renvoyée par le logcat pourrait nous aider à cibler directement le probleme...

Re-Edit:

Mon premier édit était n'importe quoi...

Edited by Profete162
Link to comment
Share on other sites

Le logcat, c'est le truc le plus important quand tu développes, c'est là que passent tous les messages,n ton débug et ou sont listées les erreurs!

Il se trouve dans éclipse normalement. Regarde dans les onglets que tu peux rajouter, c'est super important.

Link to comment
Share on other sites

Alors, j'ai trouvé le logcat dans Eclipse, merci à vous 2pour ça :).

Donc, pour commencer, j'ai suivi ton conseil quant aux xml. Ca ne règle pas le problème :(, voici le code du xml que j'ai rajouté :

<?xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="@string/hello"/>

(j'ai modifié les setContentView() bien entendu )

Voici ce que me dit la console d'Eclipse :

[2010-05-16 17:21:05 - HelloTabWidget] ActivityManager: Warning: Activity not started, its current task has been brought to the front

Et voici le logcat, je précise que maintenant, l'émulateur m'affiche seulement un écran noir, plus d'erreur de lancement, mais si j'interprete bien le logcat c'est parce qu'il n'arrive pas à démarrer le processus :

05-16 15:21:04.975: INFO/ActivityManager(51): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=test.hello/.HelloTabWidget }

05-16 15:21:05.015: DEBUG/AndroidRuntime(303): Shutting down VM

05-16 15:21:05.015: DEBUG/dalvikvm(303): DestroyJavaVM waiting for non-daemon threads to exit

05-16 15:21:05.015: DEBUG/dalvikvm(303): DestroyJavaVM shutting VM down

05-16 15:21:05.015: DEBUG/dalvikvm(303): HeapWorker thread shutting down

05-16 15:21:05.025: DEBUG/dalvikvm(303): HeapWorker thread has shut down

05-16 15:21:05.025: DEBUG/jdwp(303): JDWP shutting down net...

05-16 15:21:05.025: INFO/dalvikvm(303): Debugger has detached; object registry had 1 entries

05-16 15:21:05.035: DEBUG/dalvikvm(303): VM cleaning up

05-16 15:21:05.065: ERROR/AndroidRuntime(303): ERROR: thread attach failed

05-16 15:21:05.105: DEBUG/dalvikvm(303): LinearAlloc 0x0 used 638596 of 5242880 (12%)

05-16 15:21:07.295: WARN/WindowManager(51): No window to dispatch pointer action 0

05-16 15:21:07.405: WARN/WindowManager(51): No window to dispatch pointer action 1

05-16 15:21:07.855: WARN/WindowManager(51): No window to dispatch pointer action 0

05-16 15:21:08.175: WARN/WindowManager(51): No window to dispatch pointer action 1

05-16 15:21:14.989: WARN/ActivityManager(51): Launch timeout has expired, giving up wake lock!

05-16 15:21:15.000: WARN/ActivityManager(51): Activity idle timeout for HistoryRecord{43d920a8 test.hello/.HelloTabWidget}

05-16 15:21:20.065: DEBUG/dalvikvm(97): GC freed 314 objects / 16792 bytes in 70ms

Link to comment
Share on other sites

Je te balance du code en vrac:

Normalement pas besoin de xml ou quoi que ce soit:

package xxx.xxx.xxx;

public class MonTab extends TabActivity{

   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setFullscreen();
   TabHost host=getTabHost();
   host.setup();

   host.addTab(host.newTabSpec("All")
   .setIndicator("", this.getResources().getDrawable(R.drawable.icon))
   .setContent(new Intent(this, GetStation.class)));


   host.addTab(host.newTabSpec("Europe")
   .setIndicator("", this.getResources().getDrawable(R.drawable.europe))
   .setContent(new Intent(this, GetEuroStation.class)));


   host.addTab(host.newTabSpec("Favorites")
   .setIndicator("", this.getResources().getDrawable(R.drawable.star))
   .setContent(new Intent(this, GetFavStation.class)));

   }


   public void setFullscreen() {
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
               WindowManager.LayoutParams.FLAG_FULLSCREEN);
   }

}

Link to comment
Share on other sites

Merci beaucoup... Mais j'ai essayé ton code, j'ai toujours le même problème... Ca pourrait venir de l'émulateur? (j'ai essayé redémarrer Eclipse tout à l'heure, mais ça n'a rien change)

voici le logcat, a priori, y'a beaucoup d'erreurs :

05-16 15:54:58.305: INFO/ActivityManager(51): Start proc sly.essai for activity sly.essai/.MonTab: pid=345 uid=10025 gids={1015}

05-16 15:54:58.315: ERROR/AndroidRuntime(339): ERROR: thread attach failed

05-16 15:54:58.375: DEBUG/dalvikvm(339): LinearAlloc 0x0 used 638596 of 5242880 (12%)

05-16 15:54:58.515: DEBUG/ddm-heap(345): Got feature list request

05-16 15:54:58.705: DEBUG/AndroidRuntime(345): Shutting down VM

05-16 15:54:58.705: WARN/dalvikvm(345): threadid=3: thread exiting with uncaught exception (group=0x4001b188)

05-16 15:54:58.715: ERROR/AndroidRuntime(345): Uncaught handler: thread main exiting due to uncaught exception

05-16 15:54:58.725: ERROR/AndroidRuntime(345): java.lang.Error: Unresolved compilation problems:

05-16 15:54:58.725: ERROR/AndroidRuntime(345): R.drawable.barcode cannot be resolved

05-16 15:54:58.725: ERROR/AndroidRuntime(345): R.drawable.cards cannot be resolved

05-16 15:54:58.725: ERROR/AndroidRuntime(345): R.drawable.chart cannot be resolved

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at sly.essai.MonTab.onCreate(MonTab.java:20)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.app.ActivityThread.access$2200(ActivityThread.java:119)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.os.Handler.dispatchMessage(Handler.java:99)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.os.Looper.loop(Looper.java:123)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at android.app.ActivityThread.main(ActivityThread.java:4363)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at java.lang.reflect.Method.invokeNative(Native Method)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at java.lang.reflect.Method.invoke(Method.java:521)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

05-16 15:54:58.725: ERROR/AndroidRuntime(345): at dalvik.system.NativeStart.main(Native Method)

05-16 15:54:58.745: INFO/Process(51): Sending signal. PID: 345 SIG: 3

05-16 15:54:58.755: INFO/dalvikvm(345): threadid=7: reacting to signal 3

05-16 15:54:58.755: ERROR/dalvikvm(345): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

05-16 15:55:08.583: WARN/ActivityManager(51): Activity idle timeout for HistoryRecord{43ca50e8 sly.essai/.MonTab}

05-16 15:55:13.645: DEBUG/dalvikvm(203): GC freed 123 objects / 5376 bytes in 62ms

05-16 15:55:18.665: DEBUG/dalvikvm(313): GC freed 863 objects / 53968 bytes in 72ms

Bien sur je l'ai adapté au cas présent (j'ai changé le noms des classes).

Il semble aussi qu'il n'arrive pas à trouver les R.drawable.x alors que pourtant.... j'ai bien un dossier drawable avec à l'intérieur 3 images png portant les noms correspondant au code

Edited by Sylvain-a
Link to comment
Share on other sites

Ok, c'est fait, je t'ai invité :)

PS : voici la ligne 20 :

host.addTab(host.newTabSpec("All")

.setIndicator("", this.getResources().getDrawable(R.drawable.barcode))

.setContent(new Intent(this, AlbumsActivity.class)));

Edited by Sylvain-a
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...