2009-04-10 12 views
192

Nella mia applicazione Android, ho due classi di attività. Ho un pulsante sul primo e voglio mostrare il secondo quando viene cliccato, ma ottengo un errore. Qui ci sono le classi:Utilizzo di Intent in un'applicazione Android per mostrare un'altra attività

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 seconda classe che dovrebbe mostrare quando il pulsante viene premuto, ma non lo fa mai:

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

    }); 
    } 
} 

Come si crea un pulsante che mostrerà la seconda attività?

+0

si ottiene un errore quando si compila o eseguire il tempo? In entrambi i casi, qual è l'errore? –

+3

Questo era un errore di runtime. L'emulatore ha generato l'errore generico "l'applicazione si è arrestata in modo imprevisto", ma utilizzando il debugger, ha mostrato un "android.content.ActivityNotFoundException: impossibile trovare la classe di attività esplicita {nome classe} hai dichiarato questa attività nel tuo AndroidManifest.xml? –

+8

È un errore molto comune che le persone dimenticano di aggiungere la loro attività in Manifest.xml ma ci dovrebbe essere modo di inserirlo automaticamente –

risposta

174

Il problema era lo OrderScreenActivity non è stato aggiunto allo AndroidManifest.xml. Una volta che l'ho aggiunto come nodo dell'applicazione, ha funzionato correttamente.

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

Puoi spiegare perché è necessario? –

+0

@LouisRhys tutte le attività devono essere dichiarate nel file manifest Vedi la sezione 'Description' qui: http://developer.android.com/guide/topics/manifest/activity-element.html – ataulm

161

Aggiungi questa riga al vostro AndroidManifest.xml:

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

Perché la gente ha votato questa risposta da mesi più tardi? – Jaykul

+0

potrebbe usare un bot per votare : D –

+4

@Jaykul vedere la modifica dal 2013 nella risposta accettata – pomber

1

è possibile utilizzare il contesto del parere che ha fatto la chiamata. Esempio:

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

Il metodo getContext() non è definito per digitare 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

Si potrebbe voler spiegare la risposta a beneficio dell'OP – Luca

3

Quando si crea qualsiasi attività nel file di Android è necessario specificarlo nel AndroidManifest.xml come

<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

di questo codice:

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

contesto: fare riferimento al contesto attuale attività,

si prega di assicurarsi di aver aggiunto attività nel file manifest Android.

seguente codice per l'aggiunta di attività nel file manifest Android

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

Il contesto non può essere risolto con una variabile? –

+0

java.lang.IllegalStateException: Framment GetUserNumber {536bc00c} non collegato all'attività. –

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

Aggiungi la classe SecondActivity nel file manifest. –

+0

Il metodo setOnClickListener (View.OnClickListener) nel tipo View non è applicabile per gli argomenti (new OnClickListener() {})? –

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

semplicemente aggiungendo l'attività che vogliamo passare a deve essere collocato nel file manifesto

1

aggiungere l'attività nel file manifest

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

Risposta duplicata. –

2

nel manifesto

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

Nel codice Java in cui si deve inserire il codice intento

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