Cara menangani tombol kembali dalam aktivitas

136

Bagaimana cara menangani tombol kembali dalam suatu kegiatan? Saya punya beberapa tombol. Jika saya mengklik salah satu tombol itu mengarahkan ke tombol yang saya butuhkan. Ini berfungsi dengan baik tetapi ketika saya menekan tombol kembali itu selesai.

Bagaimana mengatasi masalah ini. Saya hanya punya satu aktivitas untuk semua tombol itu. Terima kasih sebelumnya.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

Saya telah menggunakan kode di atas untuk menangani tombol kembali tetapi tidak berfungsi. Ketika saya menekan tombol kembali, itu memukul di sana sendiri.

Shekhar
sumber

Jawaban:

326

Anda bisa menanganinya seperti ini:

untuk API level 5 dan lebih tinggi

@Override
public void onBackPressed() {
    // your code.
}

lebih lama dari API 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
Saurabh Pareek
sumber
6
Bagaimana dengan fragmen?
crushman
1
Ya, adakah yang tahu cara melakukannya dari sebuah fragmen
James Wierzba
3
@ james-wierzba menangani aktivitas dan mendelegasikan pemrosesan ke sebuah fragmen
Grigorii Chudnov
19

Selain hal di atas saya pribadi merekomendasikan

onKeyUp():

Keydown Berbicara secara terprogram akan menyala ketika pengguna menekan tombol pada awalnya tetapi itu akan berulang sementara pengguna tetap menekan tombol. *

Ini tetap berlaku untuk semua platform pengembangan.

Pengembangan Google menyarankan bahwa jika Anda mencegat tombol KEMBALI dalam tampilan Anda harus melacak KeyEvent dengan starttracking pada keydown kemudian memanggil dengan keyup.

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
Richard Sites
sumber
15

Untuk tombol kembali perangkat keras dan tombol soft home (back) mis. "<-" inilah yang cocok untuk saya. (* Catatan saya memiliki bilah aplikasi / bilah alat di aktivitas)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}



@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

Bersulang!

S bruce
sumber
Saya menggunakan selesai dan tidak kembali ke aktivitas sebelumnya.
Si8
2
"finish ()" hanya menutup aktivitas Anda saat ini. Anda perlu menangani kembali ke aktivitas sebelumnya dengan menggunakan niat. Btw, aktivitas Anda sebelumnya harus tetap terbuka jika Anda tidak "menyelesaikan ()" ketika menavigasi dari itu sebelumnya.
S bruce
Saya sedang menguji sesuatu dan akan memperbarui Anda. Terima kasih atas tanggapannya.
Si8
1
Cukup gunakan super.onBackPressed () alih-alih selesai ()
b00n12
9

Pendekatan yang lebih sederhana adalah dengan menangkap tombol Kembali, tekan dan panggil moveTaskToBack (true) sebagai berikut:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Android 2.0 memperkenalkan metode onBackPressed baru, dan rekomendasi ini tentang cara menangani tombol Kembali

Umesh K
sumber
9

Kamu harus menggunakan:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

Seperti didefinisikan di sini: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Jika Anda menggunakan versi yang lebih lama untuk mengkompilasi kode, ganti android.os.Build.VERSION_CODES.ECLAIR dengan 5 (Anda dapat menambahkan int pribadi bernama ECLAIR misalnya)

neteinstein
sumber
1

Ini membantu saya ..

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

ATAU????? bahkan Anda dapat menggunakan ini untuk beralih laci juga

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

Saya harap ini akan membantu Anda .. :)

Shubham
sumber
1

Ini adalah cara sederhana untuk melakukan sesuatu.

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

Saya pikir mungkin ada cara yang lebih rumit untuk melakukannya, tapi saya suka kesederhanaan. Misalnya, saya menggunakan templat di atas untuk membuat pengguna keluar dari aplikasi DAN KEMUDIAN kembali ke kegiatan lain yang saya pilih.

Menara Eddie
sumber