web-dev-qa-db-fra.com

Comment démarrer une nouvelle activité en cliquant sur un bouton

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?

541
Adham

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"/>
982
Emmanuel

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
52
Bryan Denny

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

  1. Utilisation de l'attribut onClick du bouton. (Débutant)
  2. Assignation d'une OnClickListener() via une classe anonyme. (Intermédiaire) 
  3. Méthode d'interface large d'activité utilisant l'instruction switch. (Pro)

Voici le lien vers mon exemple si vous souhaitez suivre: https://github.com/martinsing/ToNewActivityButtons

1. Utilisation de l'attribut 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 onClicks avec le même objectif. 

Inconvénient: lisibilité difficile lors de l'examen.

2. Assigner une 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.

3. Méthode d’interface large d’activité utilisant l’instruction 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?

48
Martin Sing

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);
}
34
IntelliJ Amiya
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
17
vishal rangani
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
9
user1923551

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);
7
user1337489
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
6
Mahtab

À 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"
6
Alex Irabor

Essayez cette méthode simple.

startActivity(new Intent(MainActivity.this, SecondActivity.class));
4
joseph sarz

Vous pouvez essayer ce code:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
4
Prinkal

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.

Comment créer des objets d'intention?

Un objet d'intention prend two paramètre dans son constructeur

  1. Le contexte  
  2. Nom de l'activité à démarrer. 

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);  
      }

});
3
Rohit Singh

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. 

3
Brian Driscoll

Kotlin

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"))
2
Khemraj

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");
2
DroidNinja

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)

 }
1
Abdul Rehman

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;
            }
1
user1918566

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
}
0
Hasib Akter

Le moyen le plus simple d'ouvrir une activité sur un clic de bouton est le suivant:

  1. Créez deux activités sous le dossier res, ajoutez un bouton à la première activité et nommez la fonction onclick.
  2. Il devrait y avoir deux fichiers Java pour chaque activité.
  3. Ci-dessous le code:

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>
0
sn n

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);
        }
    });
0
Jayesh Prajapati

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);
    }
});
0
prakash421

É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");
0