Aktivitede geri düğmesi nasıl işlenir


136

Bir aktivitede geri düğmesi nasıl kullanılır? Bazı düğmelerim var. Düğmelerden birini tıklarsam, istediğim düğmelere yönlendirilir. İyi çalışıyor ama geri düğmesine bastığımda bitiyor.

Bu problem nasıl çözülür. Tüm bu düğmeler için sadece bir etkinliğim var. Şimdiden teşekkürler.

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

Geri düğmesini işlemek için yukarıdaki kodu kullandım ama çalışmıyor. Geri düğmesine bastığımda, kendisi orada çarptı.

Yanıtlar:


326

Bunu şu şekilde halledebilirsiniz:

API seviye 5 ve üstü için

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

API 5'ten daha eski

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

    return super.onKeyDown(keyCode, event);
}

6
Parçalarda ne olacak?
crushman

1
Evet, kimse bir parçadan nasıl yapılacağını biliyor mu
James Wierzba

3
@ james-wierzba işlemede işlemek ve işleme bir parçaya delege
Grigorii Chudnov

19

Yukarıdakilere ek olarak şahsen tavsiye ederim

onKeyUp():

Programlama yoluyla konuşan kullanıcı başlangıçta bir tuşa bastığında ateş edeceği keydown ama bu olacak kullanıcı depresif anahtarı devam ederken tekrarlayın. *

Bu, tüm geliştirme platformları için geçerlidir.

Google geliştirme, bir görünümde GERİ düğmesini durduruyorsanız, KeyEvent'i tuş açılışında yıldız izlemeyle izlemeniz ve ardından tuşlarla çağırmanız gerektiğini önerdi.

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

15

Hem donanım aygıtı geri düğmesi hem de yumuşak ev (geri) düğmesi için örneğin "<-" bu benim için işe yarar. (* Not Etkinlikte bir uygulama çubuğu / araç çubuğu var)

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

}

Şerefe!


Finiş kullandım ve önceki aktiviteye geri dönmez.
Si8

2
"finish ()" yalnızca geçerli etkinliğinizi kapatır. Niyet kullanarak önceki etkinliğinize geri dönmeniz gerekir. Btw, daha önce gezinirken "bitirmediyseniz ()" önceki etkinliğiniz yine de açık olmalıdır.
S bruce

Bir şeyi test ediyorum ve sizi güncelleyeceğim. Yanıt için teşekkürler.
Si8

1
Sadece finish () yerine super.onBackPressed () kullanın
b00n12

9

Daha basit bir yaklaşım, Geri düğmesine basıp aşağıdaki gibi moveTaskToBack (true) öğesini çağırmaktır:

@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, yeni bir onBackPressed yöntemini tanıttı ve Geri düğmesinin nasıl ele alınacağına ilişkin bu öneriler


9

Kullanmalısın:

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

Burada tanımlandığı gibi: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Kodu derlemek için daha eski bir sürüm kullanıyorsanız, android.os.Build.VERSION_CODES.ECLAIR değerini 5 ile değiştirin (örneğin ECLAIR adlı özel bir int ekleyebilirsiniz)


1

Bu bana yardımcı oldu ..

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

VEYA????? bunu çekmece geçişi için de kullanabilirsiniz

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

}

Umarım bu sana yardımcı olur .. :)


1

Bu bir şey yapmanın basit bir yoludur.

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

Bence bununla ilgili daha ayrıntılı yollar olabilir, ama basitliği seviyorum. Örneğin, kullanıcının uygulamadan çıkış yapmasını sağlamak için yukarıdaki şablonu kullandım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.