2009-04-10 14 views
192

En mi aplicación de Android, tengo dos clases de actividad. Tengo un botón en el primero y quiero mostrar el segundo cuando se hace clic, pero aparece un error. Aquí están las clases:Usar la intención en una aplicación de Android para mostrar otra actividad

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 segunda clase que se debe mostrar cuando se hace clic en el botón, pero nunca lo hace:

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

    }); 
    } 
} 

¿Cómo se crea un botón que mostrará la segunda actividad?

+0

¿Usted consigue un error al compilar o en tiempo de ejecución? En cualquier caso, ¿cuál es el error? –

+3

Esto fue un error de tiempo de ejecución. El emulador dio el error genérico "la aplicación se detuvo inesperadamente", pero al usar el depurador, mostró un "android.content.ActivityNotFoundException: no se pudo encontrar la clase de actividad explícita {class name} ¿Ha declarado esta actividad en su AndroidManifest.xml? –

+8

Es un error muy común que las personas se olviden de agregar su actividad a Manifest.xml pero debe haber forma de ingresarlo automáticamente. –

Respuesta

174

El problema fue OrderScreenActivity no se ha agregado al AndroidManifest.xml. Una vez que agregué eso como un nodo de aplicación, funcionó correctamente.

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

¿Puede explicar por qué es necesario? –

+0

@LouisRhys todas las actividades deben declararse en el archivo de manifiesto . Consulte la sección 'Descripción' aquí: http://developer.android.com/guide/topics/manifest/activity-element.html – ataulm

161

Añadir esta línea a su AndroidManifest.xml:

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

¿Por qué las personas votaron esta respuesta meses después? – Jaykul

+0

podría estar usando un bot para votar : D –

+4

@Jaykul ver la edición de 2013 en la respuesta aceptada – pomber

1

puede utilizar el contexto de la opinión de que hizo la llamada. Ejemplo:

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

El método getContext() no está definido para el tipo 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

Es posible que desee explicar su respuesta para el beneficio del OP – Luca

3

Cuando se crea ninguna actividad en archivos para android tiene que especificar en AndroidManifest.xml como

<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

Usar este código:

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

contexto: contexto se refiere a la actividad actual,

por favor asegúrese de que ha agregado la actividad en el archivo de manifiesto de Android.

siguiente código para añadir la actividad en el archivo de manifiesto de Android

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

¿El contexto no se puede resolver en una variable? –

+0

java.lang.IllegalStateException: Fragmento GetUserNumber {536bc00c} no asociado a la actividad. –

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

Agregue la clase SecondActivity en su archivo de menifest. –

+0

El método setOnClickListener (View.OnClickListener) en el tipo View no es aplicable para los argumentos (new OnClickListener() {})? –

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

La simple adición de la actividad que se quiere cambiar a debe ser colocado en el archivo de manifiesto

1

añadir la actividad en su archivo de manifiesto

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

Respuesta duplicada. –

2

en el manifiesto

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

En el código de Java, donde tienes que colocar el código intención

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