Tuto Android :Utiliser une Intent pour passer d'une activité à une autre et envoyer des données via putExtra

 
Les deux vidéos suivantes contiennent un tutoriel détaillé qui vous permet d'apprendre à utiliser les Intent explicites et le passage de valeurs. Sinon vous pouvez suivre l'exercice qui existe en-dessous de la vidéo.
Intent explicite : 

Passage de valeurs en utilisant putExtra() de la classe Intent : 


Dans cet exercice, nous allons voir comment passer d'une activité à une autre en envoyant des données après avoir cliqué sur le bouton. Créez un nouveau projet  et donner le nom de «Intention» à votre projet.
Dans votre activity_main.xml mettez ce code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/intent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="Click me !" />
</RelativeLayout>

Votre classe MainActivity.java doit contenir le code suivant, vous devez tout d'abord ajoutez un Button comme variable et  par la suite il faut  lui affecter le Button créé dans l'interface xml en utilisant la méthode findViewById :
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.intent);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) 
{
// TODO Auto-generated method stub
}
});
}}
Maintenant, ajoutez une nouvelle activité en choisissant File => New => Activity => Empty Activity. Ensuite donnez le nom de SecondActivity à cette nouvelle activité: 
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>



La classe Second.java contiendra ce code par défaut:
public class Second extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
}
}
Maintenant, ce que nous voulons faire est de passer de  "MainActivity" à "Second", nous devons utiliser une Intent  explicite pour le faire.
Alors maintenant au niveau de classe MainActivity.java, nous devons ajouter ces deux lignes dans la methode onClick () de notre bouton pour passer de MainActivity à Second :

public class MainActivity extends Activity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.intent);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intention = new Intent(MainActivity.this, Second.class);
startActivity(intention);
}
});
}
}
Maintenant, exécutez votre projet et vous allez apercevoir que lorsque vous cliquez sur le bouton "Click me!", l'activité Second passe en avant plan. Mais si nous voulons envoyer des données de l'activité de départ à la deuxième activité que ferons-nous ? Nous allons créer une variable de type String dans le MainActivity.java dans laquelle nous allons mettre un texte. Ce texte serra affiché par la suite dans un Toast après le déplacement de la première activité vers la seconde .Donc la valeur de cette chaîne de caractère doit être envoyé à travers l’Intent en utilisant la méthode "putExtra". Nous allons commencer par déclarer notre variable de type String.
 String value="Hello World!!!!"; 
Nous devons mettre cette variable dans notre méthode putExtra () après la déclaration de l’Intent.
 intention.putExtra("send", value); 
La méthode  putExtra() permet d'acheminer des valeurs à travers l'Intent. Elle prend deux paramètres, le premier paramètre représente la clé dans notre exemple on a utilisé la chaine ("send") comme clé. Le deuxième paramètre représente la valeur à envoyer. la clé est toujours une chaîne. Pour la valeur , vous pouvez utiliser les types de données primitifs (int, float, ..) ainsi que les types String, Bundle, Parcelable et Serializable. Notre MainActivity aura ce code :
public class MainActivity extends AppCompactActivity 
{ Button btn; 
String value="Hello World!!!!"; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
btn=(Button)findViewById(R.id.intent); 
btn.setOnClickListener(new OnClickListener() 
{ 
@Override 
public void onClick(View v) 
{  
Intent intention = new Intent(MainActivity.this, Second.class); 
intention.putExtra("send", value); startActivity(intention); 
} 
});
}}
La question se pose maintenant : comment la classe "Second.java" pourrait récupérer les données qui ont été envoyées ? Nous devons créer un Bundle dans la classe Second.java pour récupérer les valeurs provenant de la classe « MainActivity.java ».
 Bundle extras= getIntent().getExtras();
getExtras():récupère les données qui ont été ajouté à l'aide putExtra (). getIntent () retourne l'Intent qui a  permis de passer à la seconde activité. Après ceci, nous devons créer une variable de type String dans laquelle on va récuperer la chaîne de caractères acheminée avec l'Intent et par la suite nous allons créer un Toast pour nous montrer le contenu de cette chaîne.
 
if(extras != null)
{
String newString=extras.getString("send");
Toast.makeText(Second.this,newString, Toast.LENGTH_LONG).show(); 
}
Donc le code que la classe Second.java doit contenir ressemble à ceci :
 
public class Second extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
Bundle extras= getIntent().getExtras();
if(extras != null)
{
String newString=extras.getString("send");
Toast.makeText(Second.this,newString, Toast.LENGTH_LONG).show();
}
}
}

Commentaires

Posts les plus consultés de ce blog

Ionic 2 : Envoie d'une image vers un serveur web à l'aide de PHP et Angular 2

Premier tutoriel avec Arduino et Proteus ISIS

Login et password ,formulaire d'authentification sous android avec mysql et json