Android: Kembali ke aktivitas sebelumnya

525

Saya ingin melakukan sesuatu yang sederhana di aplikasi android. Bagaimana mungkin kembali ke aktivitas sebelumnya.

Kode apa yang saya perlukan untuk kembali ke aktivitas sebelumnya

Troj
sumber
5
Pantau aktivitas terbuka terakhir
Vuk
54
Anda cukup menyelesaikan panggilan sederhana (); Cheers
Nguyen Minh Binh
super.finish (); jika Anda memanggilnya dari dalam aktivitas!
happyhardik
5
Satu pertanyaan di sini: Jika android telah menghancurkan aktivitas sebelumnya karena kurang memori atau masalah lain, maka aktivitas itu tidak lagi ada di backstack dan lalu apa yang terjadi?
Sunny
@Sunny Saya berasumsi bahwa pemulung mulai dengan aktivitas paling banyak di tumpukan. Jadi jika tidak ada aktivitas sebelumnya, juga tidak akan ada aktivitas saat ini. Tapi saya hanya berasumsi bahwa karena perilaku itu akan lebih masuk akal daripada membebaskan memori dalam tumpukan tanpa urutan tertentu. Perbaiki komentar saya, jika seseorang tahu persisnya.
Sedat Kilinc

Jawaban:

486

Aktivitas Android disimpan dalam tumpukan aktivitas. Kembali ke aktivitas sebelumnya bisa berarti dua hal.

  1. Anda membuka aktivitas baru dari aktivitas lain dengan startActivityForResult . Dalam hal ini Anda bisa memanggil fungsi finishActivity () dari kode Anda dan itu akan membawa Anda kembali ke aktivitas sebelumnya.

  2. Melacak tumpukan aktivitas. Setiap kali Anda memulai aktivitas baru dengan maksud, Anda dapat menentukan bendera maksud seperti FLAG_ACTIVITY_REORDER_TO_FRONTatau FLAG_ACTIVITY_PREVIOUS_IS_TOP. Anda dapat menggunakan ini untuk mengacak antara aktivitas dalam aplikasi Anda. Belum banyak menggunakannya. Lihat bendera di sini: http://developer.android.com/reference/android/content/Intent.html

Seperti disebutkan dalam komentar, jika aktivitas dibuka startActivity()maka seseorang dapat menutupnya finish(). Jika Anda ingin menggunakan tombol Up Anda dapat menangkap bahwa dalam onOptionsSelected(MenuItem item)metode dengan memeriksa ID item terhadap android.R.id.hometidak seperti R.id.homeyang disebutkan di komentar.

Abhinav
sumber
237
Atau jika Anda membuka aktivitas dengan startActivity (), Anda dapat menutup dengan selesai () (tidak perlu melewati parameter apa pun)
neworld
3
Bisakah Anda mengklarifikasi di mana dan bagaimana Anda menggunakan finish () sehingga ketika pengguna menekan tombol atas itu membawa mereka ke aktivitas sebelumnya
RicNjesh
4
@RicNjesh Dalam metode onOptionsItemSelected Anda jika menuitem yang diklik memiliki id R.id.home kemudian panggil finish (). Ini akan menutup aktivitas saat ini dan membawa Anda kembali ke aktivitas yang memulai dengan startActivity ()
Anders Ullnæss
Saya meminta pengguna untuk melakukan banyak aktivitas satu demi satu melalui niat. Apakah saya perlu melakukan sesuatu untuk memastikan aplikasi tidak macet dengan terlalu banyak kegiatan di stack? Terima kasih!
Ruchir Baronia
1
apakah Anda yakin aktivitas 1 tidak akan mati sebelum Anda menyelesaikan aktivitas 2?
user924
225

Coba Activity#finish(). Ini kurang lebih apa yang dilakukan tombol kembali secara default.

adamp
sumber
1
mengapa #? atau titik?
Nabin
8
Saya percaya maksudnyathis.finish();
Jens Bodal
69
The #merupakan indikator bahwa finish()adalah metode non-statis dari kelas Activity. Ini bukan Java yang valid, tetapi ini membantu menjelaskan bagaimana seseorang dapat menggunakan metode ini.
Bryan Herbst
2
@ Tanis.7x Apakah ada dan indikator untuk metode statis?
Benten
8
@Benten itu ., yaitu:Activity.someStaticMethod()
JonnyReeves
81

Cukup tulis pada klik selesai () . Ini akan membawa Anda ke Aktivitas sebelumnya.

Umer Rana
sumber
1
Meskipun onBackPressed () berfungsi dengan baik, saya pikir solusi ini lebih baik untuk berpikir tentang keluar dari aktivitas yang Anda butuhkan hanya untuk sedikit .. misalnya pemindai OCR dalam kasus saya. Terima kasih!
Gene Bo
Ini memuaskan kebutuhan saya..Terima kasih.
Roon13
68

Hanya ini

super.onBackPressed();
AtanuCSE
sumber
2
Panggilan ini baru saja menyelesaikan aktivitas saat ini, sehingga akan menunjukkan aktivitas terakhir yang terlihat. Namun jika, tidak ada aktivitas sebelumnya atau dihancurkan sementara itu, aplikasi dapat keluar.
r1k0
22
Ini adalah retas. Anda tidak seharusnya memanggil ini secara langsung. Ini adalah salah satu metode siklus hidup dan harus dipanggil oleh sistem android.
Dheeraj Bhaskar
33
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Ini akan membawa Anda ke aktivitas sebelumnya dengan menyimpan tumpukannya dan menghapus semua aktivitas setelah tumpukan.

Misalnya, jika tumpukan adalah A-> B-> C-> D dan Anda mulai B dengan flag ini, tumpukan akan menjadi A-> B

Dmitry Ryadnenko
sumber
Inilah yang berhasil pada saya. Akan sangat senang mengetahui apa yang akan menyebabkan selesai () tidak bekerja.
Relm
20

Apakah Anda ingin mengendalikan perilaku tombol kembali? Anda dapat mengganti tombol kembali (untuk pergi ke aktivitas tertentu) melalui salah satu dari dua metode.

Untuk Android 1.6 dan di bawah ini:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

Atau jika Anda hanya mendukung Android 2.0 atau lebih tinggi:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}

Untuk detail lebih lanjut: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Bryan Denny
sumber
19

Cukup panggil metode ini untuk menyelesaikan aktivitas saat ini atau untuk kembali dengan onBackPressed

finish();

ATAU

onBackPressed();
Akshay Paliwal
sumber
Saya meminta pengguna untuk melakukan banyak aktivitas satu demi satu melalui niat. Apakah saya perlu melakukan sesuatu untuk memastikan aplikasi tidak macet dengan terlalu banyak kegiatan di stack? Terima kasih!
Ruchir Baronia
13

jika Anda ingin pergi ke hanya ingin pergi menggunakan aktivitas sebelumnya

finish();

ATAU

onBackPressed();

jika Anda ingin pergi ke aktivitas kedua atau di bawah yang menggunakan berikut:

intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);
Ram G.
sumber
1
Saya menemukan bahwa finish () dan onBackPressed () keduanya berfungsi, tetapi, dalam aplikasi saya setidaknya, finish () sangat lambat dan onBackPressed () jauh lebih cepat. Ingin tahu.
scrayne
Saya meminta pengguna untuk melakukan banyak aktivitas satu demi satu melalui niat. Apakah saya perlu melakukan sesuatu untuk memastikan aplikasi tidak macet dengan terlalu banyak kegiatan di stack? Terima kasih!
Ruchir Baronia
13

Tambahkan ini dalam metode onCLick () Anda, itu akan kembali ke aktivitas Anda sebelumnya

selesai();

atau Anda bisa menggunakan ini. Ini bekerja dengan baik untuk saya

 @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  int id = item.getItemId();

      if ( id == android.R.id.home ) {
         finish();
         return true;
       }

  return super.onOptionsItemSelected(item);
  }
Darshuu
sumber
11

Jika Anda telah menyiapkan file AndroidManifest.xml dengan induk aktivitas dengan benar, Anda dapat menggunakan:

NavUtils.navigateUpFromSameTask(this);

Di mana ini adalah aktivitas anak Anda.

Thomas Decaux
sumber
8

Coba ini bertindak karena Anda harus menekan tombol kembali

finish();
onBackPressed();
Muhamad Fasil
sumber
7

Anda dapat secara eksplisit menelepon onBackPressedadalah cara termudah.
Lihat Kembali ke aktivitas sebelumnya untuk detail

Labeeb Panampullan
sumber
7

Punya masalah yang sama dan

finish();  OR super.onBackPressed();

bekerja dengan baik untuk saya, keduanya bekerja sama, tetapi tidak berhasil return

Tanpa nama
sumber
6

Mulai aktivitas kedua menggunakan niat (baik menggunakan startActivityatau startActivityForResultsesuai dengan kebutuhan Anda). Sekarang ketika pengguna menekan tombol kembali, aktivitas saat ini di atas akan ditutup dan sebelumnya akan ditampilkan.

Sekarang Katakanlah Anda memiliki dua kegiatan, satu untuk memilih beberapa pengaturan untuk pengguna, seperti bahasa, negara, dll, dan setelah memilihnya, pengguna mengklik tombol Next untuk masuk ke formulir login (misalnya). Sekarang jika login tidak berhasil, maka pengguna akan berada di aktivitas login, bagaimana jika login berhasil?

Jika login berhasil, maka Anda harus memulai aktivitas lain. Ini berarti kegiatan ketiga akan dimulai, dan masih ada dua kegiatan yang berjalan. Dalam hal ini, itu akan baik untuk digunakan startActivityForResult. Ketika login berhasil, kirim kembali data OK ke aktivitas pertama dan tutup aktivitas login. Sekarang ketika data diterima, maka mulailah aktivitas ketiga dan tutup aktivitas pertama dengan menggunakan selesai.

Altaf Hussain
sumber
Saya meminta pengguna untuk melakukan banyak aktivitas satu demi satu melalui niat. Apakah saya perlu melakukan sesuatu untuk memastikan aplikasi tidak macet dengan terlalu banyak kegiatan di stack? Terima kasih!
Ruchir Baronia
5

Anda dapat mencoba ini:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
nikki
sumber
4

Semua aktivitas / niat baru secara default memiliki kembali / perilaku sebelumnya, kecuali jika Anda telah memberi kode finish()pada aktivitas panggilan.

ameyx
sumber
4
@Override
public void onBackPressed() {
    super.onBackPressed();
}

dan jika Anda ingin tombol klik kembali maka cukup masukkan

bbsubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});
Md Hussain
sumber
3
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
      int id = item.getItemId();

      if ( id == android.R.id.home ) {
          finish();
          return true;
      }

      return super.onOptionsItemSelected(item);
 }

Coba ini berfungsi baik pada tombol kembali toolbar sebagai tombol kembali hardware .

Puni
sumber
2

Saya menyarankan NavUtils.navigateUpFromSameTask (), mudah dan sangat sederhana, Anda dapat mempelajarinya dari pengembang google. Berharap saya bisa membantu Anda!

Wuxue
sumber
1

Ada beberapa kasus untuk kembali ke aktivitas Anda sebelumnya:

Kasus 1: jika Anda ingin mengembalikan hasil ke aktivitas Anda sebelumnya maka ActivityA.java

 Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
               startActivityForResult(intent,2);

FBHelperActivity.java

 Intent returnIntent = new Intent();
 setResult(RESULT_OK, returnIntent);
 finish();

Kasus 2: ActivityA -> FBHelperActivity ----> ActivityA

ActivityA.java

 Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
               startActivity(intent);

FBHelperActivity.java

after getting of result call finish();
 By this way your second activity will finish and because 
 you did not call finish() in your first activity then
 automatic first activity is in back ground, will visible.
Gyan Swaroop Awasthi
sumber
1

Pertama, hal yang perlu Anda ingat, jika ingin kembali ke aktivitas sebelumnya. Maka jangan panggil metode finish () ketika pergi ke aktivitas lain menggunakan Intent.

Setelah itu Anda memiliki dua cara untuk kembali dari aktivitas saat ini ke aktivitas sebelumnya:

Cukup panggil: di finish()bawah pendengar klik tombol, Atau Override metode berikut untuk kembali menggunakan tombol kembali sistem:

@Override
public void onBackPressed() {
    super.onBackPressed();
}
Monir Zzaman
sumber
0

Selain semua jawaban yang disebutkan, mereka masih merupakan cara alternatif untuk melakukan ini, katakanlah Anda memiliki dua kelas, kelas A dan kelas B.

Kelas A Anda telah membuat beberapa aktivitas seperti kotak centang pilih, mencetak beberapa data dan bermaksud ke kelas B. Kelas B, Anda ingin meneruskan beberapa nilai ke kelas A dan mempertahankan status sebelumnya dari kelas A, Anda dapat menggunakan, coba alternatif ini metode atau unduh kode sumber untuk menunjukkan ini

http://whats-online.info/science-and-tutorials/125/Android-maintain-the-previous-state-of-activity-on-intent/

atau

http://developer.android.com/reference/android/content/Intent.html

Daniel Nyamasyo
sumber
0

Coba saja ini, aktivitas pertama

Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);

Dalam aktivitas kedua Anda

@Override
public void onBackPressed() {
    this.finish();
}
byteC0de
sumber
terus menerjang, data tidak bertahan saya pikir
john ktejik