Verwenden von Intent in einer Android-Anwendung, um eine andere Aktivität anzuzeigen

196

In meiner Android-Anwendung habe ich zwei Aktivitätsklassen. Ich habe eine Schaltfläche auf der ersten und möchte die zweite anzeigen, wenn darauf geklickt wird, aber ich erhalte eine Fehlermeldung. Hier sind die Klassen:

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

    });
  }
}

Die zweite Klasse, die angezeigt werden soll, wenn auf die Schaltfläche geklickt wird, dies jedoch niemals tut:

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

    });
  }
}

Wie erstelle ich eine Schaltfläche, die die zweite Aktivität anzeigt?

Tai im Quadrat
quelle
Erhalten Sie beim Kompilieren oder Ausführen eine Fehlermeldung? Was ist in beiden Fällen der Fehler?
Quintin Robinson
3
Dies war ein Laufzeitfehler. Der Emulator gab den generischen Fehler "Die Anwendung wurde unerwartet gestoppt" aus. Bei Verwendung des Debuggers wurde jedoch die Meldung "android.content.ActivityNotFoundException" angezeigt: Die explizite Aktivitätsklasse {Klassenname} konnte nicht gefunden werden. Haben Sie diese Aktivität in Ihrer AndroidManifest.xml deklariert?
Tai Squared
8
Es ist ein sehr häufiger Fehler, dass Leute vergessen, ihre Aktivitäten in Manifest.xml hinzuzufügen, aber es sollte eine Möglichkeit geben, sie automatisch einzugeben.
AZ_

Antworten:

177

Das Problem war, dass der OrderScreen Activity nicht zur AndroidManifest.xml hinzugefügt wurde . Nachdem ich das als Anwendungsknoten hinzugefügt hatte, funktionierte es ordnungsgemäß.

<activity android:name=".OrderScreen" />
Tai im Quadrat
quelle
Können Sie erklären, warum dies erforderlich ist?
Louis Rhys
@LouisRhys Alle Aktivitäten müssen in der Manifestdatei deklariert werden. Siehe DescriptionAbschnitt hier: developer.android.com/guide/topics/manifest/…
ataulm
161

Fügen Sie diese Zeile Ihrer AndroidManifest.xml hinzu:

<activity android:name=".OrderScreen" /> 
user106011
quelle
7
Warum haben die Leute diese Antwort Monate später positiv bewertet?
Jaykul
4
@ Jaykul sehen die Bearbeitung von 2013 in der akzeptierten Antwort
Pomber
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>

Sunil Chavan
quelle
1
Vielleicht möchten Sie Ihre Antwort zum Nutzen des OP
Luca
4

Verwenden Sie diesen Code:

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

Kontext: Beziehen Sie sich auf den aktuellen Aktivitätskontext.

Bitte stellen Sie sicher, dass Sie Aktivität in Android Manifest-Datei hinzugefügt haben.

Der folgende Code zum Hinzufügen von Aktivitäten in der Android-Manifestdatei

<Activity name=".SecondActivity">
</Activity>
Mahesh
quelle
java.lang.IllegalStateException: Fragment GetUserNumber {536bc00c} nicht an Aktivität angehängt.
Iman Marashi
4
<activity android:name="[packagename optional].ActivityClassName"></activity>

Das einfache Hinzufügen der Aktivität, zu der wir wechseln möchten, sollte in die Manifestdatei eingefügt werden

Java Dev
quelle
3

Wenn Sie eine Aktivität in einer Android-Datei erstellen, müssen Sie diese in AndroidManifest.xml wie angeben

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

Android-iPhone-Rahul
quelle
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);

            }
        });
Hiren Patel
quelle
Fügen Sie Ihrer Menifest-Datei die SecondActivity-Klasse hinzu.
Hiren Patel
Die Methode setOnClickListener (View.OnClickListener) im Typ View gilt nicht für die Argumente (new OnClickListener () {})?
2

Fügen Sie die Aktivität in Ihre Manifestdatei ein

<activity android:name=".OrderScreen" />
Neal Ahluvalia
quelle
2

Im Manifest

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

Im Java-Code müssen Sie den Intent-Code platzieren

startActivity(new Intent(CurrentActivity.this, OrderScreen.class);
Nilesh Panchal
quelle
1
Sie vermissen eine schließende Klammer in startActivityEs sollte so sein:startActivity(new Intent(CurrentActivity.this, OrderScreen.class));
Seltsam
1

Sie können den Kontext der Ansicht verwenden, in der der Aufruf ausgeführt wurde. Beispiel:

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

});
Bruno
quelle
Die Methode getContext () ist für den Typ MainActivity? Nicht definiert.
1
Intent i = new Intent("com.Android.SubActivity");
startActivity(i);
Ndupza
quelle