Ouvrir une activité différente avec des boutons radios différents
Bonjour,
Je m'excuse de vous déranger,
Je débute depuis 1 semaine et demi en android...dans le cadre d'un stage de BTS..Donc je n'ai jamais utilisé android, et le démarrage est un peu difficile...C'est pour cela que j'aurais besoin de votre aide..
En faite j'essaye que chaque bouton radio ouvre une activité différente.
Par expl je clique sur mon premier bouton radio j'ouvre une activité avec des informations données, après un retour, je cloque sur un nouveau bouton radio et j'ouvre une autre activité.
Pour le moment sur mon code j'arrive bien à sélectionner les boutons, je le vois grâce au message "Toast" qui me dit quel bouton j'ai sélectionné..Mais pas moyen de l'envoyer sur une activité différente...
Quelqu'un aurait-il des conseils à m'apporter ?
Merci par avance.
La ligne qui fait démarrer ton autre activité est startActivityForResult(myIntent, CODE_REQJEU);. Cette ligne lance l'activité indiquée dans ton Intent. Ce que tu définit ici : Intent myIntent = new Intent(MainActivity.this, SecondActivite.class);. Tu lance donc toujours SecondActivite.
Pour faire ce que tu souhaites, il faut changer l'Intent en fonction de la selection.
Tu regardes d'abords le choix de l'utilisateur comme tu as fait :
Code:
1 2 3 4
//on détermine quel radio bouton a été sélectionné
RadioButton selectRadio = (RadioButton) findViewById(group.getCheckedRadioButtonId());
// on définit le texte du bouton séctionné
String choix = selectRadio.getText().toString();
Puis tu fais un switch sur choix, et en fonction du cas tu crée un Intent différent. Et a la fin tu lance l'Intent.
01/06/2016, 09h40
Haelera
Bonjour !
Merci pour ta réponse !
1. --> Mais pour le "putExtra" est-ce que je dois l'intégrer dans mon code ? Car de ce que j'ai compris il permet de stocker des données... Donc je pourrais stocker ma donnée "choix" dans le putExtra non ?
2. --> Et aussi je lance "CODE_REQJEU" dans
Code:
startActivityForResult(myIntent, CODE_REQJEU);
Car je l'instancie:
Code:
privatefinalint CODE_REQJEU = 1000;
Mais j'ignore si c'est nécessaire de faire ça ?
Sinon si je suis ton raisonnement
il faut que je fasse:
Code:
1 2 3 4 5 6 7 8
//Détermine le boutonRadio
RadioButton selectRadio = (RadioButton)findViewById(group.getCheckedRadioButtonId());
//Definir le bouton radio
String choix = selectRadio.getText().toString();
//Definir ce qui doit être lancé
Intent myIntent = new Intent(MainActivity.this, choix.getClass());
//Lancer la bonne page
startActivityForResult(myIntent, CODE_REQJEU);
Donc j'ai mis un "choix.getClass()" pour choisir une autre activité. Mais après si je ne mets que choix... Comment le bouton radio 1 sait qu'il doit aller sur l'activité bureau1 ?? :/
01/06/2016, 10h04
Drowan
1 - putExtra te permet de stocker des données dans ton Intent. Le but de ceci est qu'une fois dans la deuxième activité tu puisse récupérer ces données.
2 - Ce nombre que tu passe dans startActivityForResult te sert à identifier le lancement d'une activité. Une fois la seconde activité terminée, la fonction onActivityresult va être lancée dans ta mainActivity. Ici tu va pouvoir vérifier le requestCode (dans ton cas CODE_REQJEU). cela te permet de savoir dans ton main de quelle activité tu viens et depuis quel intent elle avait été lancée.
Vu ce que tu souhaites je pense qu'il faut faire un quelque chose comme ça :
Je pense que s'il ne se passe rien c'est que tu ne rentre dans aucun case. Le texte de tes RadioButton correspond bien à tes case ?
Je te conseille pour t'aider à débugger ton appli de te mettre des log aux endroits clefs
ici rajoute ça juste avant ton switch : Log.d("MainActivity", "OnClick : Choix : " + choix);.
Autre chose, tes bureau extends MainActivity, est-ce bien ce que tu veux ? Sinon fait plutôt extends AppCompatActivity
01/06/2016, 11h39
Haelera
4 pièce(s) jointe(s)
Ah c'était le texte.. J'avais mit l'id..
Mais en mettant le texte, quand je clique sur "valider" cela me met que "l'application s'est arrêtée".
D'accord j'ai remis "extends AppCompatActivity". J'avais mis "extends MainActivty" en pensant que les sous-classes, Bureau1 et Bureau2 hériteraient de la classe mère MainActivity.
Je suis vraiment désolée j'ai essayé de regarder comment utiliser le debug d'androidStudio... Mais je ne pense que j'ai réussis...
Quand je l'ai démarré j'ai la page View.java qui s'est ouverte:
Et sinon j'ai essayé de mettre des points d'arrêt pour savoir ou cela bug... Et si j'ai bien compris, il a réussit à me récupérer la valeur mais cela cesse de fonctionner au niveau du "break;" et c'est ce qui ferait que mon application s'arrête directement...
Et donc j'ai aussi remit le log que vous m'avez dit.. Et j'ai mis l'import: "import android.util.Log;"
Extends MainActivity que si tu souhaite que tes autres activités soient des "sous-classes" de Main activité. Sinon extends AppCompatActivity.
Pour le Debug, Dans Android Studio, tu as une sous-fenêtre "Android Monitor". C'est là que tu vas voir les retours de ton code. Il faudrait y regarder le message d'erreur qui doit apparaître quand ton application plante.
01/06/2016, 15h43
Haelera
1 pièce(s) jointe(s)
Voilà voilà !
Bon je crois que ça fonctionne...
Mon code doit être bancal, je pense mais les trois pages de tests fonctionnent...
package com.example.administrateur.applicationdeux;
import android.content.Intent;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
publicclass MainActivity extends AppCompatActivity {private Button btnValider;
privatefinalint CODE_REQJEU = 1000;
private RadioButton radio;
private RadioGroup group;
privateint choix;
@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button btnValider = (Button) findViewById(R.id.Valider);
//depart.setOnClickListener(this);//on initialise le groupe de radio bouton
group = (RadioGroup) findViewById(R.id.radioGroup1);
//@Override
btnValider.setOnClickListener(new View.OnClickListener(){publicvoid onClick(View v){//Détermine le boutonRadio
RadioButton radio = (RadioButton)findViewById(group.getCheckedRadioButtonId());
//Definir le bouton radio//String choix = radio.getText().toString();
Intent intent;
Log.d("MainActivity", "OnClick : Choix : " + choix);
int choix = radio.getId();
switch(choix){case R.id.Bureau1 :
intent = new Intent(MainActivity.this, Bureau1.class);
startActivityForResult(intent, CODE_REQJEU);
break;
case R.id.Bureau2 :
intent = new Intent(MainActivity.this, Bureau2.class);
startActivityForResult(intent, CODE_REQJEU);
break;
case R.id.Bureau3 :
intent = new Intent(MainActivity.this, Bureau3.class);
startActivityForResult(intent, CODE_REQJEU);
break;
default :
//erreur? ou choix invalide ?}//FinIntent}//FinOnclick});//FinOnClickListener}//FinOnCreateprotectedvoid onResume(int resultCode){if(resultCode == 1){// tu reviens de bureau 1}elseif(resultCode == 2){// tu reviens de bureau 2}elseif(resultCode == 3){// tu reviens de bureau 3}// etc ...}}//FinMainActivity
01/06/2016, 17h33
Drowan
Si tu as une erreur sur finish(), c'est simplement parce que cette fonction ne prend pas d'argument ;)
Après ton code de lancement des activités est correct.
Tu as juste un souci sur le onResume(), il faut que tu laisse le @Override (ceci indique que tu surcharge la fonction). Et il ne faut pas lui définir d'arguments.
@Overrideprotectedvoid onResume(){int resultCode = 0;
super.onResume();
if(resultCode == 1){// tu reviens de bureau 1}elseif(resultCode == 2){// tu reviens de bureau 2}elseif(resultCode == 3){// tu reviens de bureau 3}// etc ...}
Car dans le tutoriel, ils disent d'utiliser un "onActivityResult" alors que moi j'utilise un "onResume"
Donc pour que mon onResume fonctionne j'ai initialiser "resultCode".
Mais je crois qu'il faut que je rajoute un code là où il y a les commentaires "// tu reviens de bureau 1"
Mais c'est ce que je disais plus haut, ce qui ressemble à mon code c'est ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11
protectedvoid onActivityResult(int requestCode, int resultCode, Intent data){if(requestCode == 1){if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}if(resultCode == Activity.RESULT_CANCELED){//Write your code if there's no result}}}//onActivityResult
Mais je ne sais pas si je peux adapter ce code à un "onResume"...
Donc après j'ai fais mon bureau1.java:
et j'ai rajouté ceci:
Code:
1 2 3
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
Car Bureau1.java ne va pas renvoyer de données à l'application MainActivity.java
Mais j'ai un doute sur l'emplacement du bout de code...
Car au final plus rien ne fonctionne si j'essaye de refaire comme le tutoriel là...
Et de même en mettant l'intérieur du code du "onActivityResult" dans mon code "onResume"
Vraiment désolée pour toutes ces questions... Je dois pas mal embêter... Mais je n'ai vraiment pas fais assez de java je crojs :'(
02/06/2016, 09h46
Drowan
onResume et onActivityResult sont deux choses bien différentes.
onResume est une methode qui se lance lorsque ton activité était en arrière plan et qu'elle passe au premier plan.
onActivityResult est une methode qui se lance lorsque qu'une autre activité se termine. C'est ici qu'il faut traiter le resultat de l'activité qui vient de se fermer.
Donc là actuellement dans mon application je dois donc intégrer le onResume et le onActivityResult Pour mon passage de bouton radio à une autre page ?
Merci pour les liens :)
02/06/2016, 12h38
Drowan
Dans ton application le onResume a peu d'interêt (pour l'instant du moins). Tu peux donc ne pas le mettre ou le mettre en ne faisant que le super.onResume(); dedans.
Par contre il te faut implémenter le onActivityResult afin de savoir de quelle activité tu reviens.
08/06/2016, 11h38
Haelera
Bon je reviens car je n'arrive encore pas à régler mon problème...
Je pense que j'utilise mal le "onActivityResult" et en essayant de l'utiliser, je pense qu'il manque l'action dans le "onClick" pour dire que l'on lance une application ?
Mon application continue de se fermer quand je cloque sur le bouton valider...
package com.example.administrateur.applicationdeux;
import android.content.Intent;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
publicclass MainActivity extends AppCompatActivity implements OnClickListener {private Button btnValider;
privatefinalint CODE_REQJEU = 1000;
private RadioGroup group;
private View.OnClickListener btnValiderListener = new View.OnClickListener(){@Overridepublicvoid onClick(View v){//Détermine le boutonRadio
RadioButton radio = (RadioButton)findViewById(group.getCheckedRadioButtonId());
//Definir le bouton radioint choix = radio.getId();
switch(choix){case R.id.Bureau1:
intent = new Intent(MainActivity.this, Bureau1.class);
startActivityForResult(intent, 1);
break;
case R.id.Bureau2:
intent = new Intent(MainActivity.this, Bureau2.class);
startActivityForResult(intent, 2);
break;
case R.id.Bureau3:
intent = new Intent(MainActivity.this, Bureau3.class);
startActivityForResult(intent, 3);
break;
}//FinSwitch}//FinOnclick};
@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnValider = (Button) findViewById(R.id.Valider);
group = (RadioGroup) findViewById(R.id.radioGroup1);
btnValider.setOnClickListener(btnValiderListener);
}//FinOnCreate@Overrideprotectedvoid onActivityResult(int requestCode, int resultCode, Intent data){//Ici tu récupère des informations sur l'activité qui vient de se finir (soit bureau1 ou bureau2, etc.)//Et ici tu execute un code s'il y a besoin de faire quelque chose sur la fin des bureaux//sinon, ne fait rien dans cette fonction}//FinOnActivity}//FinMainActivity
14/06/2016, 08h22
Haelera
1 pièce(s) jointe(s)
Bonjour,
Je suis désolée Drowan mais j'ai utilisé l'autre technique, car ta technique ne fonctionnait pas. En intégrant le bouton valider directemment dans le code, cela ne fonctionnait pas.
J'ai essayé une autre technique l'on m'a dite en utilisant le "onClick"
Sauf que ce code ne fonctionne pas non plus... Et l'autre personne ne comprend pas pourquoi... J'ai fais aussi un log, donc j'ai sélectionné le bouton radio 1 et cliqué sur valider, puis le 2 et valider et enfin le 3 et valider, et voilà ce que le logCat m'a donné:
L'autre personne m'a interprété le résultat est m'a dit:
"La on peut voir que la valeur de "choix" est bien égale à la valeur de "R.id.Bureau1" au premier clic, puis a "R.id.Bureau2" au 2eme clic, puis a "R.id.Bureau3" au 3eme clic.
le problème c'est que du coup je vois pas d'où viens le problème... les valeurs sont bien égales donc ça devrait passer dans le switch... mais le startActvity passe pas..."
Mais rien de plus concluant... Donc voilà ... Si quelqu'un pouvait m'aider... Merci...
14/06/2016, 13h07
Drowan
Salut,
La technique que tu utilises (onClick) est tout aussi valable et tout aussi bien :ccool:
Ton souci viens du fait que tu fais ton switch sur view.getId() ce qui n'est pas du tout la même chose que choix.
Ici view est le bouton valider sur lequel tu as appuyé. Son ID ne correspond donc à aucune valeur qui t'interesse. Tandis que ta variable choix contient la bonne information puisque lorsque tu l'affiches en log tu as pu véréfier que c'était bon.
Il faut juste faire ton switch sur la variable choix.
14/06/2016, 13h51
Haelera
Tu me parles du dernier code ?
Car moi j'ai laissé celui sans les boucles if, donc le code un peu plus haut.
Il faut que je garde le code avec les boucles if ?
Donc j'ai fais ceci. Mais je ne sais pas où fermer mes accolades, avant ou après le break ?
Dans les deux cas j'ai essayé et j'ai un message d'erreur qui me dit que l'application à dû se fermer.
14/06/2016, 14h55
Drowan
Pardon, je me suis embrouillé en lisant tes deux codes :hola:
Celui avec les if n'est pas bon, l'autre semble correct en effet.
Tu peux l'améliorer en faisant juste Intent intent; au lieu de Intent intent = new Intent(); à la ligne 39.
Sinon je ne vois pas ce qui peut faire que ça ne marche pas... :?
Est-ce que tes activités sont bien déclarées dans ton manifest ?