android'de eylem çubuğu geri düğmesini nasıl geçersiz kılınır?


95

Aktivite geri düğmesini sert tuş geri düğmesi yerine eylem çubuğunda özelleştirmek istiyorum. onBackPressed()Yöntemi geçersiz kıldım . Öykünücümün geri düğmesiyle çalışıyor, ancak işlem çubuğu geri düğmesiyle değil.

Bunun eylem çubuğu ile olmasını istiyorum. Bunu nasıl yapabilirim?

İşte kodum:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

Geri basılmış olsun ya da olmasın bu tostu kullandım, ancak gerçek uygulama değişiklikleri önceki aktiviteye geri dönmek gibi. Ancak bu, işlem çubuğunun üst kısmında bulunan düğme ile çalışmıyor (etkinlik başlığının yanı sıra).

Lütfen herhangi biri bana sorunu belirtebilir.

Yanıtlar:


212

Ana sayfa düğmesinin tıklama işlemini geçersiz kılmak istediğinizi düşünüyorum. Aktivitenizde bunun gibi bu işlevi geçersiz kılabilirsiniz.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}

1
Noah İbrahim, Aslında tarayıcıda sol üst köşede geri düğmesi gibi Geri düğmesi var. Bu düğmeye tıkladığımda, önceki aktiviteye geri dönmek istiyorum. Yukarıda yayınlanan kod gibi değil.
GK

4
super.onBackPressed () ekleyin; ona göre
redestructa

2
Değiştim sonra bu benim için çalıştı return true;için return super.onOptionsItemSelected(item). Ardından, kullanıcı işlem çubuğu geri düğmesini tıkladığında bir şey gerçekleştirebilir, ancak yine de düğmenin aynı işlevini koruyabilirsiniz.
kumaheiyama

Bu teknikle geri ok düğmesi geç yanıt veriyor. Olayın ateşlenmesi için bir saniye beklemem gerektiği anlamına geliyor. Ayrıca bastığınızda efekt için bu düğmedeki seçicinin görünmemesi
Gopal Singh Sirvi

Benim için çalışmadı. Hata ayıkladığımda, ana sayfa düğmesinin kimliklerini ve tıklanan düğmenin kimliğinin farklı olduğunu buldum.
viper

46

ActionBar geri düğmesinin donanım geri düğmesiyle aynı şekilde davranmasını istiyorsanız:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }

1
vaka android.R.id.homeateşlenmiyor
Trancer

2
@Trancer, Fragment'te kullanırsanız, setHasOptionsMenu(true)parçanın onCreate yöntemini de
çağırmalısınız

10

Kullanıcının geri düğmesine veya işlem çubuğu ana sayfa düğmesine basabileceği unutulmaması gereken iki nokta.
Yani, onu aynı hedefe yönlendirmek istiyorsanız, bunu yapabilirsiniz.

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

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

Bu, kullanıcıyı tuşa veya işlem çubuğu düğmesine basma amacına götürür.


vaka android.R.id.homeateşlenmiyor
Trancer

@Trancer, neredeyse 1.5+ yıl oldu. Ve şimdi android yapmıyorum. Şimdi sana yardım edemem Afedersiniz.
ssi-anik

öyleyse çözüm nedir?
GA1

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

2
Yorum olarak ekleyebilirdin. Kabul edilen cevapla aşağı yukarı aynı.
Sufian

7

Maalesef benimki geç bir cevap, ancak bu sayfaya aynı soruyla gelen başka biri için yukarıdakileri denedim:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

ancak bu "Geri" düğmesine basmayı yakalayamadı.

Sonunda https://stackoverflow.com/a/37185334/3697478 adresinde benim için işe yarayan ve "AppCompatActivity" destek kitaplığındaki eylem çubuğunu kullanırken "onSupportNavigateUp ()" öğesini geçersiz kılan bir yöntem buldum . (Daha yeni eylem çubuğu / araç çubuğu kitaplığı için eşdeğer bir "onNavigateUp ()" vardır.)

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

ve manifest dosyasından "android: parentActivityName =". MainActivity "bölümünü kaldırdım.


4

Bunu yalnızca iki adımda başardım,

1. Adım: AndroidManifest.xml'e gidin ve parametreyi etikete ekleyin - android: parentActivityName = ". Home.HomeActivity"

misal :

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

Adım 2: ActivityDetail içinde önceki sayfa / aktivite için eyleminizi ekleyin

misal :

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

2

Eğer dönmek isterseniz bir Faaliyet önceki örneği , İşlem Çubuğu ev düğmeye basarak yeniden olmadan bunu, geri yığınından birini kullanmak getParentActivityIntent yöntemi geçersiz kılabilirsiniz:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

DÜZENLEME: Üst etkinliğinizin launchMode'unu singleTop olarak ayarlayarak da
aynı sonucu elde edebilirsiniz . Öyleyse bildiriminizde ebeveyn faaliyetine ayarlayın . Ya da YUKARI amacıyla FLAG_ACTIVITY_CLEAR_TOP bayrağını kullanabilirsiniz. referans: Yukarı Gezinme Sağlama

android:launchMode="singleTop"


2

(1) Çocuk etkinliğiniz için Ebeveyn etkinliği ekleyin (AndroidManifest.xml)

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

(2) alt etkinlik içindeki onSupportNavigateUp yöntemini geçersiz kılın

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}

0
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }
    //noinspection SimplifiableIfStatement
    if (id == R.id.signIn) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

0

Çubukta geri düğmesini ayarlamanın birkaç yolu vardır:

1) yöntem .setDisplayHomeAsUpEnabled(true);bunu yapacak ve sonra basitçe geçersiz kılabilirsinizandroid.R.id.home

2) ekleyerek <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />Android Manifest'te, ancak bu durumda olamaz geçersiz android.R.id.homeOnOptionsMenuSelected içinde.

.. neden kendileri için işe yaramadığını merak edenler için ...

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.