Aller au contenu

Lancer activity au clique d'un menu


didi2204

Recommended Posts

Bonjour à tous !

Je suis en train de réaliser un menu pour la première fois mais même avec un code que j'ai pris sur le net, je me retrouve avec une erreur.

Pouvez-vous me dire d'ou elle vient et me dire comment y remédier.

Mon projet est le suivant: Lorsque l'on clique sur un menu, l'application va lancer une nouvelle activity (un nouvel écran) par exemple pour revenir à l'accueil de l'appli, pour quitter le programme aussi.

Mon code java pour l'activity principale :

package com.didi2204.android.menu2.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class Menu3Activity extends Activity {

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       MenuInflater inflater = getMenuInflater();
       inflater.inflate(R.menu.menu, menu);
       return true;
   }

@Override
public boolean onOptionsItemSelected(MenuItem item) {

	switch (item.getItemId()) {

		case R.id.menu_home:
			Intent i = new Intent(this, Home.class);
   			startActivityForResult(i, ACTIVITY1_REQUEST);
   			break;

		case R.id.menu_setup:
			Intent j = new Intent(this, About.class);
   			startActivityForResult(j, ACTIVITY2_REQUEST);
   			break;

		case R.id.menu_quit:
			Intent k = new Intent(this, Quit.class);
   			startActivityForResult(k, ACTIVITY3_REQUEST);
   			break;
	}

	return(super.onOptionsItemSelected(item));
}


}

Mes erreurs soulignés concernent ACTIVITY1_REQUEST, ACTIVITY2_REQUEST, ACTIVITY3_REQUEST

Merci d'avance pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

ACTIVITY1_REQUEST, ACTIVITY2_REQUEST, ACTIVITY3_REQUEST ne sont défini nul part ? S'ils sont souligné en rouge, le message te dit surement qu'ils ne sont pas déclarés ("ACTIVITY1_REQUEST cannot be resolved to a variable").

Lien vers le commentaire
Partager sur d’autres sites

Où tu le souhaites ! A voir la syntaxe de tes variables (les majuscules :P), j'aurais tendance à penser que ce sont des constantes.

T'as différentes questions à te poser donc :

- Est-ce que la valeur peut changer ? (non si c'est une constante)

- Est-ce qu'elles doivent être accessible de n'importe quelle classe (c'est souvent le cas pour les constantes !)

Si la réponse à ces deux questions est oui, tu vas les déclarer ainsi :

public static final int ACTIVITY1_REQUEST = 1;
public static final int ACTIVITY2_REQUEST = 2;
public static final int ACTIVITY3_REQUEST = 3;

Ensuite tu met ça dans ta class Menu3Activity si tu le souhaites (avant la méthode onCreateOptionsMenu), ou encore mieux, tu fais une nouvelle classe :

class Constantes {
public static final int ACTIVITY1_REQUEST = 1;
public static final int ACTIVITY2_REQUEST = 2;
public static final int ACTIVITY3_REQUEST = 3;
}

Ca va te permettre de centraliser toutes tes constantes.

Pour y accéder depuis n'importe où il te suffit d'écrire :

Constantes.ACTIVITY1_REQUEST

edit : S'il ne s'agit pas de constante tu enlèves simplement le "final", si elles ne sont utilisées que dans ta classe Menu3Activity tu les déclares directement dans celle-ci en enlevant le "static", etc. Tu modules les mots clés en fonction de tes besoins ;)

Lien vers le commentaire
Partager sur d’autres sites

Tout d'abord merci à toi Lord Yu !!!

Mais mon problème n'est pas encore tout à fait réglé.

Pour fermer l'application sa marche super mais pour lancer les activity j'ai un beau "Fermeture soudaine de l'application ..." quand je clique sur mon menu "Parametres"

Mon activity principale :

package com.didi2204.android.menu2.test;

import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class Menu3Activity extends Activity {

private static final int ACTIVITY1_REQUEST = 1;
private static final int ACTIVITY2_REQUEST = 2;
private static final int ACTIVITY3_REQUEST = 3;

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       MenuInflater inflater = getMenuInflater();
       inflater.inflate(R.menu.menu, menu);
       return true;
   }

@Override
public boolean onOptionsItemSelected(MenuItem item) {

	switch (item.getItemId()) {

		case R.id.menu_home:
			Intent i = new Intent(this, Home.class);
   			startActivityForResult(i, ACTIVITY1_REQUEST);
   			break;

		case R.id.menu_setup:
			Intent j = new Intent(this, About.class);
   			startActivityForResult(j, ACTIVITY2_REQUEST);
   			break;

		case R.id.menu_parametres:
			Intent k = new Intent(this, Parametres.class);
   			startActivityForResult(k, ACTIVITY3_REQUEST);
   			break;

		case R.id.menu_quit:
			finish();
			return true;

			}


	return(super.onOptionsItemSelected(item));
}


}

Mon activity "Parametres" :

package com.didi2204.android.menu2.test;

import android.os.Bundle;
import android.preference.PreferenceActivity;


public class Parametres extends PreferenceActivity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.prefs);

}
}

Mon xml "prefs" si sa peut aider :

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

<PreferenceScreen

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

<PreferenceCategory android:title="Utilisateur">

<EditTextPreference

android:key="login"

android:title="Nom d'utilisateur"

android:summary="Entrez votre nom d'utilisateur">

</EditTextPreference>

<EditTextPreference

android:title="Mot de passe"

android:key="password"

android:summary="Entrez votre mot de passe"

android:password="true">

</EditTextPreference>

</PreferenceCategory>

<PreferenceCategory android:title="Notifications">

<RingtonePreference

android:key="sonnerie"

android:title="Sonnerie de notification"

android:summary="Choisissez la sonnerie pour les notifications">

</RingtonePreference>

<CheckBoxPreference

android:key="vibrate"

android:title="Vibreur"

android:summary="Vibre lors d'une notification">

</CheckBoxPreference>

</PreferenceCategory>

</PreferenceScreen>

Encore merci de ton aide !

Lien vers le commentaire
Partager sur d’autres sites

Je n'ai pas les moyens de tester ton code tout de suite (ce soir seulement !) mais jette un oeil au logcat pour voir l'erreur qui ressort. Pour l'afficher sous eclipse :

Window > Open Perspective ... > DDMS

Là un onglet s'appelle "Logcat" et affichera un erreur en rouge au moment du plantage. Ca serait intéressant de la voir.

Logcat est un outil indispensable lorsque tu développes pour Android.

Lien vers le commentaire
Partager sur d’autres sites

Le logcat affiche ceci lorsque je sélectionne le menu "Parametres" :

08-31 14:53:11.124: ERROR/AndroidRuntime(4321): FATAL EXCEPTION: main
08-31 14:53:11.124: ERROR/AndroidRuntime(4321): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.didi2204.android.menu2.test/com.didi2204.android.menu2.test.Parametres}; have you declared this activity in your AndroidManifest.xml?
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.app.Activity.startActivityForResult(Activity.java:2851)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.didi2204.android.menu2.test.Menu3Activity.onOptionsItemSelected(Menu3Activity.java:39)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.app.Activity.onMenuItemSelected(Activity.java:2229)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:749)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:857)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:123)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.view.View$PerformClick.run(View.java:9130)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.os.Handler.handleCallback(Handler.java:587)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.os.Looper.loop(Looper.java:130)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at android.app.ActivityThread.main(ActivityThread.java:3694)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at java.lang.reflect.Method.invokeNative(Native Method)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at java.lang.reflect.Method.invoke(Method.java:507)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
08-31 14:53:11.124: ERROR/AndroidRuntime(4321):     at dalvik.system.NativeStart.main(Native Method)
08-31 14:53:11.147: WARN/ActivityManager(2083):   Force finishing activity com.didi2204.android.menu2.test/.Menu3Activity
08-31 14:53:11.655: WARN/ActivityManager(2083): Activity pause timeout for HistoryRecord{40dbedb0 com.didi2204.android.menu2.test/.Menu3Activity}

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup !!!!!!!!!

Grâce à toi j'ai su voir d'ou venait l'erreur !

Je n'avais en faite pas inscrit l'activity "Parametres" dans le manifest.

J'ai essayer et sa marche.

Merci, vraiment merci. tongue.png

Sa peut être débile car je n'ai réussi qu'à faire cela mais pour moi j'avance dans le développement android.

big_smile.png

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...