2009-04-10 6 views
192

Dans mon application Android, j'ai deux classes d'activité. J'ai un bouton sur le premier et je veux montrer le second quand on clique dessus, mais j'ai une erreur. Voici les classes:Utilisation de l'intention dans une application Android pour afficher une autre activité

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 doit apparaître lorsque le bouton est cliqué, mais ne 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 puis-je créer un bouton qui montrera la deuxième activité?

+0

-vous obtenez une erreur lorsque vous compilez ou de l'exécution? Dans les deux cas, quelle est l'erreur? –

+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 manière inattendue", mais en utilisant le débogueur, il a montré une "android.content.ActivityNotFoundException: Impossible de trouver la classe d'activité explicite {class name} avez-vous déclaré cette activité dans votre AndroidManifest.xml? –

+8

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

Répondre

174

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

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

Pouvez-vous expliquer pourquoi cela est nécessaire? –

+0

@LouisRhys toutes les activités doivent être déclarées dans le fichier manifeste Voir la section «Description» ici: http://developer.android.com/guide/topics/manifest/activity-element.html – ataulm

161

Ajouter cette ligne à votre AndroidManifest.xml:

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

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

+0

utilise peut-être un bot pour voter : D –

+4

@Jaykul voir l'édition de 2013 dans la réponse acceptée – pomber

1

vous pouvez utiliser le contexte de la vue qui a fait 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); 
    } 

}); 
+0

La méthode getContext() est indéfinie pour le type MainActivity? –

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 pouvez expliquer votre réponse au profit de l'OP – Luca

3

Lorsque vous créez une activité dans le fichier Android, vous devez indiquer 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> 

1
Intent i = new Intent("com.Android.SubActivity"); 
startActivity(i); 
4

Utilisez ce code:

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

contexte: se référer au contexte de l'activité actuelle,

s'il vous plaît assurez-vous que vous avez une activité ajoutée dans le fichier manifeste Android.

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

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

Le contexte ne peut pas être résolu en une variable? –

+0

java.lang.IllegalStateException: Fragment GetUserNumber {536bc00c} non associé à l'activité. –

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

      } 
     }); 
+0

Ajoutez la classe SecondActivity dans votre fichier manifeste. –

+0

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

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

ajoutant simplement l'activité que nous voulons passer à doit être placé dans le fichier manifeste

1

ajouter l'activité dans votre fichier manifeste

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

Réponse en double. –

2

Dans le Manifest

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

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

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