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

Réponses:

1117

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 AndroidManifest.xml:

<activity android:label="@string/app_name" android:name="NextActivity"/>
Emmanuel
la source
18
Où est la partie clic du bouton? (clic sur le bouton → transition vers l'activité suivante)
Jonny
4
@Jonny: Voici un exemple de clic sur un bouton. stackoverflow.com/a/7722428/442512
Emmanuel
8
Y a-t-il une différence entre CurrentActivity.this.startActivity(myIntent)et startActivity(myIntent)?
Confondre le
5
Ouais, facile lol. Il y a plus de codemissing que de code réellement tapé. Où est manquante toute l'interface xml et le code .java? Downvote
Liquid Core
111
Liquid, voudriez-vous qu'il l'emballe aussi dans un apk? ;)
Casey Murray
60

Créez une intention pour une activité ViewPerson et transmettez le PersonID (pour une recherche de 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 transmettez 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 devez partager des données entre deux activités, vous pouvez également avoir un singleton global.

public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

Appelez-le ensuite 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
Bryan Denny
la source
58

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 Intentclasse; Intention | Développeurs Android .

  1. En utilisant le onClick attribut du bouton. (Débutant)
  2. Attribuer un OnClickListener() via une classe anonyme. (Intermédiaire)
  3. Méthode d'interface à l'échelle de l'activité utilisant l' switchinstruction. (Pro)

Voici le lien vers mon exemple si vous souhaitez suivre:

1. Utilisation du onClick attribut du bouton. (Débutant)

Les boutons ont un onClickattribut 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 à réaliser à la volée, modulaire et peut facilement définir plusieurs onClicks pour la même intention.

Inconvénient : lisibilité difficile lors de la révision.

2. Attribuer un OnClickListener()via une classe anonyme. (Intermédiaire)

C'est lorsque vous définissez un séparé setOnClickListener()pour chacun buttonet remplacez chacun onClick()avec sa propre intention.

En classe Java:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

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

        Button 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 à l'échelle de l'activité utilisant l' switchinstruction. (Pro)

C'est lorsque vous utilisez une switchinstruction pour vos boutons dans leonClick() méthode pour 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);

    Button button1 = (Button) findViewById(R.id.button1);
    Button 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;
    }

Avantage : gestion facile des boutons car toutes les intentions des boutons sont enregistrées dans une seule onClick()méthode


Pour la deuxième partie de la question, la transmission de données, veuillez consulter Comment puis-je transmettre des données entre les activités dans l'application Android?

Martin Sing
la source
Excellente réponse, merci! connaissez-vous une pénalité de performance en utilisant l'une des suggestions?
lmedinas
3
# 3 n'est pas "pro". C'est l'option la moins lisible et maintenable, et elle sera refactorisée en # 1 ou # 2 par le premier développeur expérimenté qui la verra. (Ou ils utiliseront Butterknife, qui est l'option # 1 sur les stéroïdes.)
Kevin Krumwiede
Je pense que les programmeurs professionnels n'aiment pas du tout # 3. mettre, Idk, 10 boutons click handler inside 1 method est un cauchemar et n'est pas du tout professionnel. La méthode avec des lignes de code zilion ne vous rend pas professionnel. KISS .
Mehdi Dehghani
3 n'est certainement pas "pro"
Kaiser Keister
36

Lorsque l'utilisateur clique sur le bouton, directement à l'intérieur du XML comme ça:

<Button
         android:id="@+id/button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="TextButton"
         android:onClick="buttonClickFunction"/>

En utilisant l'attribut, android:onClicknous déclarons le nom de la méthode qui doit être présent sur l'activité parent. Je dois donc créer cette méthode au sein de notre activité comme ça:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}
IntelliJ Amiya
la source
19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
vishal rangani
la source
2
ce n'est qu'une réponse partielle. de plus ce n'est pas suffisant, c'est-à-dire qu'il ne fonctionnera pas sans modifications supplémentaires dans le projet.
andr
10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
user1923551
la source
8

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 dans la méthode onCreate de NextActivity.

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
user1337489
la source
7

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

            }

À partir de 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"
Alex Irabor
la source
7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
Mahtab
la source
7

Essayez cette méthode simple.

startActivity(new Intent(MainActivity.this, SecondActivity.class));
joseph sarz
la source
5

Vous pouvez essayer ce code:

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

La façon de démarrer de nouvelles activités consiste à diffuser une intention, et il existe un type spécifique d'intention que vous pouvez utiliser pour transmettre des données d'une activité à une autre. Ma recommandation est de consulter les documents des développeurs Android liés aux intentions ; c'est une mine d'informations sur le sujet, et a aussi des exemples.

Brian Driscoll
la source
4

Kotlin

Première activité

startActivity(Intent(this, SecondActivity::class.java)
  .putExtra("key", "value"))

Deuxième activité

val value = getIntent().getStringExtra("key")

Suggestion

Mettez toujours les clés dans un fichier constant pour une manière plus gérée.

companion object {
    val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
  .putExtra(PUT_EXTRA_USER, "value"))
Khemraj
la source
4

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 objet Intent .

Comment créer des objets d'intention?

Un objet d'intention prend deux paramètres dans son constructeur

  1. Le contexte
  2. Nom de l'activité à démarrer. (ou nom complet du package)

Exemple:

entrez la description de l'image ici

Par exemple, si vous avez deux activités, dites HomeActivityet DetailActivityet vous voulez commencer à partir DetailActivityde 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é.

Revenant à la partie clic du 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);  
      }

});
Rohit Singh
la source
3

Démarrez une autre activité à partir de cette activité et vous pouvez également passer des paramètres via Bundle Object.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);

Retrouver des données dans une autre activité (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");
DroidNinja
la source
2

Implémentez l'interface View.OnClickListener et remplacez 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;
            }
user1918566
la source
2

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 au langage, donc j'ajoute le code pour accomplir cette tâche en langage Kotlin.

Voici comment faire cela à Kotlin pour andorid

testActivityBtn1.setOnClickListener{
      val intent = Intent(applicationContext,MainActivity::class.java)
      startActivity(intent)

 }
Abdul Rehman
la source
2

Le moyen le plus simple d'ouvrir une activité en cliquant sur un bouton est:

  1. Créez deux activités sous le dossier res, ajoutez un bouton à la première activité et donnez un nom à la onclickfonction.
  2. Il devrait y avoir deux fichiers java pour chaque activité.
  3. Voici 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 (il suffit d'ajouter ce bloc de code à l'existant)

 </activity>
        <activity android:name=".SecondActivity">
  </activity>
sn n
la source
1

Prenez le bouton en xml en premier.

  <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 lister le bouton.

 pre.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });
Jayesh Prajapati
la source
1

Lorsque 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
}
Hasib Akter
la source
1

É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");
Gyan Swaroop Awasthi
la source
1

Placer 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'écouteur de clic dans l'activité 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);
    }
});
prakash421
la source