Utilisation d'Intention dans une application Android pour afficher une autre activité


196

Dans mon application Android, j'ai deux classes d'activités. J'ai un bouton sur le premier et je veux afficher le second quand il est cliqué, mais j'obtiens une erreur. Voici les cours:

public class FirstActivity extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button orderButton = (Button)findViewById(R.id.order);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        Intent intent = new Intent(FirstActivity.this, OrderScreen.class);
        startActivity(intent);
      }

    });
  }
}

La deuxième classe qui devrait s'afficher lorsque le bouton est cliqué, mais ne le fait jamais:

public class OrderScreen extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.order);

    Button orderButton = (Button) findViewById(R.id.end);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        finish();
      }

    });
  }
}

Comment créer un bouton qui affichera la deuxième activité?


Obtenez-vous une erreur lors de la compilation ou de l'exécution? Dans les deux cas, quelle est l'erreur?
Quintin Robinson

3
Il s'agissait d'une erreur d'exécution. L'émulateur a donné l'erreur générique "l'application s'est arrêtée de façon inattendue", mais en utilisant le débogueur, il a montré une "android.content.ActivityNotFoundException: impossible de trouver la classe d'activité explicite {nom de classe} avez-vous déclaré cette activité dans votre AndroidManifest.xml?
Tai Squared

8
C'est un bug très courant que les gens oublient d'ajouter leur activité dans Manifest.xml mais il devrait y avoir moyen de l'entrer automatiquement.
AZ_

Réponses:


177

Le problème était que l' OrdreScreen Activity n'a pas été ajouté au fichier AndroidManifest.xml . Une fois que j'ai ajouté cela en tant que nœud d'application, cela a fonctionné correctement.

<activity android:name=".OrderScreen" />

Pouvez-vous expliquer pourquoi cela est nécessaire?
Louis Rhys

@LouisRhys toutes les activités doivent être déclarées dans le fichier manifeste. Voir la Descriptionsection ici: developer.android.com/guide/topics/manifest/…
ataulm

161

Ajoutez cette ligne à votre AndroidManifest.xml:

<activity android:name=".OrderScreen" /> 

7
Pourquoi les gens ont-ils voté cette réponse des mois plus tard?
Jaykul

4
@Jaykul voir l'édition de 2013 dans la réponse acceptée
bombardier

16

---- FirstActivity.java -----

    package com.mindscripts.eid;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;

public class FirstActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button orderButton = (Button) findViewById(R.id.order);
    orderButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(FirstActivity.this,OrderScreen.class);
            startActivity(intent);
        }
    });

 }
}

--- OrderScreen.java ---

    package com.mindscripts.eid;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;



    public class OrderScreen extends Activity {
@Override



protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_class);
    Button orderButton = (Button) findViewById(R.id.end);
    orderButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            finish();
        }
    });

 }
}

--- AndroidManifest.xml ----

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.mindscripts.eid"
  android:versionCode="1"
  android:versionName="1.0">


<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".FirstActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".OrderScreen"></activity>
</application>


1
Vous voudrez peut-être expliquer votre réponse au profit de l'OP
Luca

4

Utilisez ce code:

Intent intent=new Intent(context,SecondActivty.class);
startActivity(intent);
finish();

contexte: se référer au contexte d'activité actuel,

veuillez vous assurer que vous avez ajouté une activité dans le fichier manifeste Android.

Code suivant pour ajouter une activité dans le fichier manifeste Android

<Activity name=".SecondActivity">
</Activity>

java.lang.IllegalStateException: le fragment GetUserNumber {536bc00c} n'est pas attaché à l'activité.
Iman Marashi

4
<activity android:name="[packagename optional].ActivityClassName"></activity>

Ajouter simplement l'activité vers laquelle nous voulons basculer doit être placé dans le fichier manifeste


3

Lorsque vous créez une activité dans un fichier Android, vous devez la spécifier dans AndroidManifest.xml comme

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".MyCreativityActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>


     <activity android:name=".OrderScreen"></activity>


</application>


3
b1 = (Button) findViewById(R.id.click_me);
        b1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(i);

            }
        });

Ajoutez la classe SecondActivity dans votre fichier de manifeste.
Hiren Patel

La méthode setOnClickListener (View.OnClickListener) dans le type View n'est pas applicable pour les arguments (new OnClickListener () {})?

2

ajoutez l'activité dans votre fichier manifeste

<activity android:name=".OrderScreen" />

2

Dans le manifeste

<activity android:name=".OrderScreen" />

Dans le code Java où vous devez placer le code d'intention

startActivity(new Intent(CurrentActivity.this, OrderScreen.class);

1
Il vous manque un support de fermeture dans startActivityIl devrait être comme ceci:startActivity(new Intent(CurrentActivity.this, OrderScreen.class));
Strange

1

vous pouvez utiliser le contexte de la vue qui a effectué l'appel. Exemple:

Button orderButton = (Button)findViewById(R.id.order);

orderButton.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View view) {
    Intent intent = new Intent(/*FirstActivity.this*/ view.getContext(), OrderScreen.class);
    startActivity(intent);
  }

});

La méthode getContext () n'est pas définie pour le type MainActivity?

1
Intent i = new Intent("com.Android.SubActivity");
startActivity(i);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.