Aller au contenu

Utilsation d'onglets


frmoul

Recommended Posts

Bonsoir,

J'ai créé une application pour tester l'utilisation d'onglets dans le but d'en intégrer à une appli une fois cette programmation comprise.

J'ai donc suivi un tuto.

Une fois lancée, l'appli ne montre rien, seulement son nom en entête (alors que dans le manifest il est demandé de ne pas afficher la ligne de titre...).

Je poste tout le code ci-dessous. Si vous aviez une idée du problème, je suis preneur. Je n'arrive pas à trouver ce qui cloche.

Voici "ActiveTab.java" :

package utilisation.onglet;

import android.app.Activity;
import android.app.TabActivity;
import android.app.TabActivity;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;

public class ActiviteTab extends Activity {

/** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
	setContentView(R.layout.tab1);

       //On récupère notre intent et la valeur nommée valeur
	String valeur = getIntent().getStringExtra("valeur");

	//On affiche cette chaîne dans le textview
	TextView textView = (TextView) findViewById(R.id.TextView01);
	textView.setText(valeur);

   }
}

Voici "onglet.java" :

package utilisation.onglet;

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



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

		    private TabHost host;
		    private TabSpec spec;

		    @Override
		    public void onCreate(Bundle savedInstanceState) {
		        super.onCreate(savedInstanceState);
				setContentView(R.layout.main);
				Intent intent = new Intent(this, ActiviteTab.class);

				host = getTabHost();
				intent.putExtra("valeur", "Coucou tout le monde");

				spec = host.newTabSpec("un").setIndicator("Un",
				getResources().getDrawable(R.drawable.icon)).setContent(intent);
				host.addTab(spec);

				intent.putExtra("valeur", "Hello world !");
				spec = host.newTabSpec("deux").setIndicator("Deux").setContent(intent);
				host.addTab(spec);
	}
}

Voici main.xml :

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">
   <LinearLayout
    android:id="@+id/content"
    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="65px"/>
		<FrameLayout
		android:id="@android:id/tabcontent"
		android:layout_width="fill_parent"
		android:layout_height="200px"
		android:paddingTop="65px">
		</FrameLayout>
	</LinearLayout>
</TabHost>

Voici Tab1.xml :

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">

<TextView android:text="@+id/TextView01" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"></TextView>


</LinearLayout>

Voici AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="utilisation.onglet"
     android:versionCode="1"
     android:versionName="1.0">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".onglet"
                 android:label="@string/app_name"
			  android:theme="@android:style/Theme.NoTitleBar">
       </activity>

	<activity android:name=".ActiviteTab"></activity>

   </application>
   <uses-sdk android:minSdkVersion="4" />
</manifest>

Modifié par frmoul
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Merci, j'ai corriger selon ce conseil.

Maintenant l'appli se lance sans erreur, par contre, on ne voit que la ligne de titre (qui devrait être masqué selon ce qui est écrit dans le manifest).

On ne voit pas les onglets.

D'où ça pourrait venir ?

J'ai mis à jour le code au début du post.

Frmoul

Tes deux Activity héritent de TabActivity, alors que ce ne doit être le cas que de la seule l'Activity principale, pas de celles qui correspondent aux onglets.

Lien vers le commentaire
Partager sur d’autres sites

passe le layout height de ton tab widget en wrap_content au lieu de fill_parent

DE plus tu n'as pas intent-filter sur ton activity principale

<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			<category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

J'ai modifié le manifest comme suit, mais l'ajout de ce code génère une erreur dès le lancement de l'application.

Ais-je mis le code au mauvais endroit ?

Est-ce que ce code est indispensable ?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="utilisation.onglet"
     android:versionCode="1"
     android:versionName="1.0">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".onglet"
                 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=".ActiviteTab"></activity>

   </application>

   <uses-sdk android:minSdkVersion="4" />
</manifest> 

passe le layout height de ton tab widget en wrap_content au lieu de fill_parent

DE plus tu n'as pas intent-filter sur ton activity principale

<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			<category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>

Lien vers le commentaire
Partager sur d’autres sites

Je n'ai pas l'impression que tu as fait les corrections dans le sens que je t'indiquais :

ActiviteTab DOIT hériter de TabActivity

et onglet NE DOIT PAS hériter de TabActivity

De même, dans le manifest.xml, la définition de l'intent filter doit être faite pour ActivityTab, pas onglet

J'ai mis à jour le code au début du post.

Je ne trouve pas que ce soit une bonne idée. Cela rend les réponses qui suivent incompréhensibles, puisque les solutions qu'elles proposent font référence à un problème qui n'est plus présent dans tes extraits de code. Et, ça n'a plus aucun intérêt pour les futurs lecteurs de ce post qui viendraient y chercher des informations...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

encore merci pour ta patience et ton aide mais je dois mal comprendre quelque chose.

Je pensais que l'activité principale est justement "onglet.java". Les noms des activités sont peut être mal choisis.

En effet, dans ActivityTab il y a la description du format d'un onglet type et dans onglet il y a la créations des onglets utilisant le format décrit dans ActivityTab.

Est-ce bien "onglet.java" l'activité principale ?

frmoul

Je n'ai pas l'impression que tu as fait les corrections dans le sens que je t'indiquais :

ActiviteTab DOIT hériter de TabActivity

et onglet NE DOIT PAS hériter de TabActivity

De même, dans le manifest.xml, la définition de l'intent filter doit être faite pour ActivityTab, pas onglet

Je ne trouve pas que ce soit une bonne idée. Cela rend les réponses qui suivent incompréhensibles, puisque les solutions qu'elles proposent font référence à un problème qui n'est plus présent dans tes extraits de code. Et, ça n'a plus aucun intérêt pour les futurs lecteurs de ce post qui viendraient y chercher des informations...

Lien vers le commentaire
Partager sur d’autres sites

C'est l'Activity principale, celle qui contient la barre d'onglets, qui doit hériter de TabActivity. Et les Activities qui correspondent au contenu des onglets héritent simplement de Activity

Pour mieux comprendre toute cette problématique d'onglets, tu peux te référer au tutoriel sur le site développeur Android : ici

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...