Dans une application Android, comment démarrer une nouvelle activité lorsqu'un utilisateur clique sur un bouton d'une autre activité et comment transmettre des données entre ces deux activités?
Facile.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);
Les extras sont récupérés de l’autre côté via:
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
String value = intent.getStringExtra("key"); //if it's a string you stored.
}
N'oubliez pas d'ajouter votre nouvelle activité dans le fichier AndroidManifest.xml:
<activity Android:label="@string/app_name" Android:name="NextActivity"/>
Créez une intention pour une activité ViewPerson et transmettez le PersonID (pour une recherche dans la base de données, par exemple).
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
Ensuite, dans ViewPerson Activity, vous pouvez obtenir le paquet de données supplémentaires, assurez-vous qu'il n'est pas nul (au cas où vous ne transmettriez parfois pas de données), puis récupérez les données.
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
personID = extras.getString("PersonID");
}
Maintenant, si vous avez besoin de partager des données entre deux activités, vous pouvez aussi avoir un singleton global.
public class YourApplication extends Application
{
public SomeDataClass data = new SomeDataClass();
}
Puis appelez-le dans n'importe quelle activité en:
YourApplication appState = ((YourApplication)this.getApplication());
appState.data.CallSomeFunctionHere(); // Do whatever you need to with data here. Could be setter/getter or some other type of logic
Les réponses actuelles sont excellentes mais une réponse plus complète est nécessaire pour les débutants. Il existe 3 façons différentes de démarrer une nouvelle activité dans Android et ils utilisent tous la classe Intent
; Intention | Développeurs Android .
onClick
du bouton. (Débutant)OnClickListener()
via une classe anonyme. (Intermédiaire) switch
. (Pro)Voici le lien vers mon exemple si vous souhaitez suivre: https://github.com/martinsing/ToNewActivityButtons
onClick
du bouton. (Débutant)Les boutons ont un attribut onClick
qui se trouve dans le fichier .xml:
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:onClick="goToAnActivity"
Android:text="to an activity" />
<Button
Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:onClick="goToAnotherActivity"
Android:text="to another activity" />
En classe Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
public void goToAnActivity(View view) {
Intent intent = new Intent(this, AnActivity.class);
startActivity(intent);
}
public void goToAnotherActivity(View view) {
Intent intent = new Intent(this, AnotherActivity.class);
startActivity(intent);
}
Avantage: facile à créer à la volée, modulaire et permet de définir plusieurs variables onClick
s avec le même objectif.
Inconvénient: lisibilité difficile lors de l'examen.
OnClickListener()
via une classe anonyme. (Intermédiaire)C'est à ce moment que vous définissez une setOnClickListener()
distincte pour chaque button
et que vous substituez chaque onClick()
à sa propre intention.
En classe Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), AnActivity.class);
view.getContext().startActivity(intent);}
});
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), AnotherActivity.class);
view.getContext().startActivity(intent);}
});
Avantage: Facile à réaliser à la volée.
Inconvénient: Il y aura beaucoup de classes anonymes qui rendront la lisibilité difficile lors de la révision.
switch
. (Pro)C'est à ce moment que vous utilisez une instruction switch
pour vos boutons dans la méthode onClick()
afin de gérer tous les boutons de l'activité.
En classe Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button1:
Intent intent1 = new Intent(this, AnActivity.class);
startActivity(intent1);
break;
case R.id.button2:
Intent intent2 = new Intent(this, AnotherActivity.class);
startActivity(intent2);
break;
default:
break;
}
Advantage: gestion facile des boutons car toutes les intentions des boutons sont enregistrées dans une seule méthode onClick()
Pour la deuxième partie de la question, transmission de données, veuillez consulter Comment puis-je transmettre des données entre Activités dans l'application Android?
Lorsque l'utilisateur clique sur le bouton, directement dans le code XML, comme ceci:
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="TextButton"
Android:onClick="buttonClickFunction"/>
En utilisant l'attributAndroid:onClick
, nous déclarons le nom de la méthode devant être présent dans l'activité parente. Je dois donc créer cette méthode dans notre activité comme ça:
public void buttonClickFunction(View v)
{
Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
startActivity(intent);
}
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);
startActivity(in);
This is an explicit intent to start secondscreen activity.
Emmanuel,
Je pense que les informations supplémentaires doivent être mises avant de commencer l'activité, sinon les données ne seront pas encore disponibles si vous y accédez par la méthode onCreate de NextActivity.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
À partir de l'activité d'envoi, essayez le code suivant
//EXTRA_MESSAGE is our key and it's value is 'packagename.MESSAGE'
public static final String EXTRA_MESSAGE = "packageName.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
....
//Here we declare our send button
Button sendButton = (Button) findViewById(R.id.send_button);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//declare our intent object which takes two parameters, the context and the new activity name
// the name of the receiving activity is declared in the Intent Constructor
Intent intent = new Intent(getApplicationContext(), NameOfReceivingActivity.class);
String sendMessage = "hello world"
//put the text inside the intent and send it to another Activity
intent.putExtra(EXTRA_MESSAGE, sendMessage);
//start the activity
startActivity(intent);
}
Dans l’activité de réception, essayez le code suivant:
protected void onCreate(Bundle savedInstanceState) {
//use the getIntent()method to receive the data from another activity
Intent intent = getIntent();
//extract the string, with the getStringExtra method
String message = intent.getStringExtra(NewActivityName.EXTRA_MESSAGE);
Ensuite, ajoutez simplement le code suivant au fichier AndroidManifest.xml
Android:name="packagename.NameOfTheReceivingActivity"
Android:label="Title of the Activity"
Android:parentActivityName="packagename.NameOfSendingActivity"
Essayez cette méthode simple.
startActivity(new Intent(MainActivity.this, SecondActivity.class));
Vous pouvez essayer ce code:
Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
Le démarrage d'une activité à partir d'une autre activité est un scénario très courant parmi les applications Android.
Pour démarrer une activité, vous avez besoin d'un [Intent][1]
object.
Un objet d'intention prend two paramètre dans son constructeur
Exemple:
Ainsi, par exemple, si vous avez deux activités, dites HomeActivity
et DetailActivity
et vous voulez démarrer DetailActivity
à partir de HomeActivity
(HomeActivity -> DetailActivity).
Voici l'extrait de code qui montre comment démarrer DetailActivity à partir de
AccueilActivité.
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
Et vous avez terminé.
Revenir à la partie clic de bouton.
Button button = (Button) findViewById(R.id.someid);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
}
});
La manière de démarrer de nouvelles activités consiste à diffuser une intention. Vous pouvez utiliser un type particulier d'intention pour transmettre des données d'une activité à une autre. Ma recommandation est de consulter la documentation de développement Android liée à intents ; c'est une mine d'informations sur le sujet et des exemples.
Première activité
startActivity(Intent(this, SecondActivity::class.Java)
.putExtra("key", "value"))
Deuxième activité
val value = getIntent().getStringExtra("key")
Suggestion
Toujours mettre les clés dans le fichier constant pour plus de manière gérée.
companion object {
val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.Java)
.putExtra(PUT_EXTRA_USER, "value"))
Commencez une autre activité à partir de cette activité et vous pourrez également transmettre des paramètres via l’objet Bundle.
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);
Récupérer des données dans une autre activité (YourActivity)
String s = getIntent().getStringExtra("USER_NAME");
Bien que des réponses appropriées aient déjà été fournies, je suis ici pour chercher la réponse dans la langue kotlin. Cette Question n’est pas spécifique à une langue, j’ajoute donc le code pour accomplir cette tâche en langue Kotlin.
Voici comment vous faites cela à Kotlin pour andorid
testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.Java)
startActivity(intent)
}
Implémentez l'interface View.OnClickListener et substituez la méthode onClick.
ImageView btnSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search1);
ImageView btnSearch = (ImageView) findViewById(R.id.btnSearch);
btnSearch.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSearch: {
Intent intent = new Intent(Search.this,SearchFeedActivity.class);
startActivity(intent);
break;
}
Quand le bouton est cliqué:
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent= new Intent(getApplicationContext(), NextActivity.class);
intent.putExtra("data", value); //pass data
startActivity(intent);
}
});
Pour recevoir les données supplémentaires de NextActivity.class
:
Bundle extra = getIntent().getExtras();
if (extra != null){
String str = (String) extra.get("data"); // get a object
}
Le moyen le plus simple d'ouvrir une activité sur un clic de bouton est le suivant:
onclick
.MainActivity.Java
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.TextView;
import Android.content.Intent;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goToAnotherActivity(View view) {
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
}
SecondActivity.Java
package com.example.myapplication;
import Android.app.Activity;
import Android.os.Bundle;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
}
}
AndroidManifest.xml (Ajoutez simplement ce bloc de code à l'existant)
</activity>
<activity Android:name=".SecondActivity">
</activity>
Prenez Button en XML d'abord.
<Button
Android:id="@+id/pre"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@mipmap/ic_launcher"
Android:text="Your Text"
/>
Faire l'auditeur du bouton.
pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
Placez le widget de bouton en xml comme ci-dessous
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button"
/>
Après cela initialisez et gérez l'auditeur de clic dans Activity comme ci-dessous.
Dans la méthode Activity on Create:
Button button =(Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new
Intent(CurrentActivity.this,DesiredActivity.class);
startActivity(intent);
}
});
Écrivez le code dans votre première activité.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondAcitvity.class);
//You can use String ,arraylist ,integer ,float and all data type.
intent.putExtra("Key","value");
startActivity(intent);
finish();
}
});
Dans secondActivity.class
String name = getIntent().getStringExtra("Key");