Menggunakan Intent di aplikasi Android untuk menampilkan aktivitas lain

196

Dalam aplikasi Android saya, saya memiliki dua kelas aktivitas. Saya memiliki tombol pada yang pertama dan saya ingin menunjukkan yang kedua ketika diklik, tetapi saya mendapatkan kesalahan. Berikut kelas-kelasnya:

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

    });
  }
}

Kelas kedua yang harus ditampilkan ketika tombol diklik, tetapi tidak pernah:

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

    });
  }
}

Bagaimana cara membuat tombol yang akan menampilkan aktivitas kedua?

Tai kuadrat
sumber
Apakah Anda mendapatkan kesalahan saat Anda mengkompilasi atau menjalankan waktu? Dalam kedua kasus, apa kesalahannya?
Quintin Robinson
3
Ini adalah kesalahan waktu berjalan. Emulator memberikan kesalahan umum "aplikasi telah berhenti tiba-tiba", tetapi menggunakan debugger, itu menunjukkan "android.content.ActivityNotFoundException: Tidak dapat menemukan kelas aktivitas eksplisit {nama kelas} sudahkah Anda mendeklarasikan aktivitas ini di AndroidManifest.xml?
Tai Squared
8
Ini adalah bug yang sangat umum yang orang lupa untuk menambahkan aktivitas mereka ke Manifest.xml tetapi harus ada cara untuk memasukkannya secara otomatis.
AZ_

Jawaban:

177

Masalahnya adalah OrderScreen Activity tidak ditambahkan ke AndroidManifest.xml . Setelah saya menambahkan itu sebagai simpul aplikasi, itu berfungsi dengan baik.

<activity android:name=".OrderScreen" />
Tai kuadrat
sumber
Bisakah Anda menjelaskan mengapa ini diperlukan?
Louis Rhys
@LouisRhys semua aktivitas harus dideklarasikan dalam file manifes. Lihat Descriptionbagian di sini: developer.android.com/guide/topics/manifest/…
ataulm
161

Tambahkan baris ini ke AndroidManifest.xml Anda:

<activity android:name=".OrderScreen" /> 
pengguna106011
sumber
7
Mengapa orang membatalkan jawaban ini dari beberapa bulan kemudian?
Jaykul
4
@Jaykul melihat hasil edit dari 2013 dalam jawaban yang diterima
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
sumber
1
Anda mungkin ingin menjelaskan jawaban Anda untuk kepentingan OP
Luca
4

Gunakan kode ini:

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

konteks: merujuk ke konteks aktivitas saat ini,

pastikan Anda telah menambahkan aktivitas dalam file manifes android.

Kode berikut untuk menambahkan aktivitas dalam file manifes android

<Activity name=".SecondActivity">
</Activity>
Mahesh
sumber
java.lang.IllegalStateException: Fragmen GetUserNumber {536bc00c} tidak dilampirkan ke Activity.
Iman Marashi
4
<activity android:name="[packagename optional].ActivityClassName"></activity>

Cukup menambahkan aktivitas yang ingin kita alihkan harus ditempatkan dalam file manifes

dev java
sumber
3

Saat Anda membuat aktivitas apa pun di file android, Anda harus menentukannya di AndroidManifest.xml like

<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
sumber
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
sumber
Tambahkan kelas SecondActivity di file menifest Anda.
Hiren Patel
Metode setOnClickListener (View.OnClickListener) dalam tipe View tidak berlaku untuk argumen (OnClickListener baru () {})?
2

tambahkan aktivitas di file manifes Anda

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

Dalam Manifest

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

Di Kode Java tempat Anda harus meletakkan kode maksud

startActivity(new Intent(CurrentActivity.this, OrderScreen.class);
Nilesh Panchal
sumber
1
Anda kehilangan satu braket penutup di startActivityIni harus seperti ini:startActivity(new Intent(CurrentActivity.this, OrderScreen.class));
Strange
1

Anda dapat menggunakan konteks tampilan yang melakukan panggilan. Contoh:

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
sumber
Metode getContext () tidak terdefinisi untuk tipe MainActivity?
1
Intent i = new Intent("com.Android.SubActivity");
startActivity(i);
Ndupza
sumber