Jump to content

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.

Link to comment
Share on other 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 ;)

Link to comment
Share on other 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 !

Link to comment
Share on other 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.

Link to comment
Share on other 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}

Link to comment
Share on other 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

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...