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


Dans une application Android, comment démarrer une nouvelle activité (GUI) lorsqu'un utilisateur clique sur un bouton dans une autre activité, et comment transmettre des données entre ces deux activités?


499
2017-11-15 15:43


origine


Réponses:


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

905
2017-11-15 15:51



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, vous assurer qu'il n'est pas nul (dans le cas où vous ne transmettez parfois pas de données), puis obtenir 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 également 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

46
2017-11-15 16:07



Les réponses actuelles sont bonnes, 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é sur Android, et ils utilisent tous Intent classe; Intention | Développeurs Android.

  1. En utilisant le onClick attribut du bouton. (Débutant)
  2. Assigner un OnClickListener() via un cours anonyme. (Intermédiaire)
  3. Méthode d'interface large d'activité utilisant le switch déclaration. (Pro)

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

 1. Utiliser le onClick attribut du bouton. (Débutant)

Les boutons ont un onClick attribut trouvé 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 cours de 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 à fabriquer à la volée, modulaire, et peut facilement définir plusieurs onClicks à la même intention facilement.

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

 2. Attribution d'un OnClickListener() via une classe anonyme. (Intermédiaire)

C'est quand vous définissez un séparé setOnClickListener() pour chaque button et remplacer chaque onClick() avec sa propre intention.

En cours de 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 à fabriquer à la volée.

Inconvénient: il y aura beaucoup de classes anonymes qui rendront la lisibilité difficile lors de l'examen.

 3. Méthode d'interface large d'activité utilisant le switch déclaration. (Pro)

C'est quand vous utilisez un switch déclaration pour vos boutons dans le onClick() méthode pour gérer tous les boutons de l'activité.

En cours de 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;
    }

Avantage: Gestion facile des boutons car toutes les intentions de bouton sont enregistrées en un seul onClick() méthode


Pour la deuxième partie de la question, transmettre des données, s'il vous plaît voir Comment transmettre des données entre des activités dans une application Android?


37
2017-12-30 02:14



Lorsque l'utilisateur clique sur le bouton, directement dans le XML comme ça:

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

Utiliser l'attribut android:onClick nous déclarons le nom de la méthode qui doit être présent sur 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);
}

33
2017-07-29 12:41



Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);

17
2018-02-11 10:28



    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.

8
2017-12-03 11:58



Emmanuel,

Je pense que les informations supplémentaires doivent être placées 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);

7
2018-04-16 23:53



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

Ajoutez simplement le code suivant au fichier AndroidManifest.xml

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"

6
2018-01-29 13:27



Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);

5
2018-05-24 07:03



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 que vous consultez les documents de développement Android liés à intentions; c'est une mine d'informations sur le sujet, et a aussi des exemples.


3
2017-11-15 15:48



Vous pouvez essayer ce code:

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

3
2017-12-26 11:32