İşlem çubuğunda geri düğmesi görüntüle


181

Ben görüntülemek çalışıyorum Back buttonüzerinde Action barönceki sayfa / etkinliğini taşımak veya ana sayfaya (ilk açılış) için. Ve yapamam.

kodum.

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);

kodun içinde onCreate.


19
Kullanın: getSupportActionBar (). SetDisplayHomeAsUpEnabled (true);
Sukitha Udugamasooriya

@SukithaUdugamasooriya Çok teşekkür ederim
Sardorbek Rkh

Yanıtlar:


207

iyi bu geri göstermek için basit bir düğme

actionBar.setDisplayHomeAsUpEnabled(true);

ve onOptionsItemSelected adresinden back olayını özelleştirebilirsiniz

case android.R.id.home:
this.finish();
return true;

Ben onOptionsItemSelected (MenuItem öğesi) içinde yukarıdaki satırları ekledim, çünkü zaten eylem kötü bir menü menü seçeneklerini yeniden yönlendirmek için kimlikleri listeleme am, tıklandığında

Tuhaf davranışlarla karşılaşırsanız (olduğu gibi: bir parçanın geri düğmesini (R.id.home) kullanır ve etkinliği kapatırsanız), bu etkinlikte "android: noHistory" ayarlanmamış olduğundan emin olun, çünkü yaparsanız, bir parçadan aktivitenin "genel görünümüne" geri dönmek bile onu bitirecektir.
Igor

2
R.id.home düğmesinin çalışması için AndroidMenifest.xml dosyasında üst etkinliği ayarladığınızdan emin olun.
Leap Hawk

192

Bence onSupportNavigateUp()bunu yapmanın en iyi ve en kolay yolu, aşağıdaki adımları kontrol edin. Adım 1 gereklidir, ikinci adımın alternatifi vardır.

Adım 1 geri düğmesini gösteren:onCreate() Geri düğmesini göstermek için bu satırı yönteme ekleyin .

assert getSupportActionBar() != null;   //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true);   //show back button

2. Adım geri tıklamanın uygulanması: Bu yöntemi geçersiz kıl

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

işte böyle yapılır
VEYA Adım 2 Alternatif: Manifest dosyasındaki aktiviteye şu şekilde meta ekleyebilirsiniz :

<meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="MainActivity" />

Düzenleme: Eğer kullanmıyorsanız AppCompatAktivite sonra kullanmayınsupport sözcüğü kullanabilirsiniz

getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`

// And override this method
@Override 
public boolean onNavigateUp(){ 
     finish(); 
     return true; 
}

Yorum için @atariguy'a teşekkürler.


2
Bu çözüm, üst etkinliğe geri veri göndermeniz gerektiğinde veya EditText'in üst etkinliğindeki değerlerini korumak istediğinizde harika çalışır. onOptionsItemSelectedÇözümleri denedim ama başaramadım.
weeix

3
En iyi çözüm +10.
Satheeshwaran

3
Eylem Çubuğu için destek kitaplığını kullanmıyorsanız, aşağıdaki gibi değiştirin: getActionBar().setDisplayHomeAsUpEnabled(true); @Override public boolean onNavigateUp(){ finish(); return true; }
atariguy

1
Olağanüstü. +1. Basit. Zarif. Güzel. :)
Rohit Kumar

1
Yardımınız için teşekkürler. Manifest kullanarak, çalışmadı ama çalıştığı kodu kullanarak
santosh devnath

70

Sihir gerçekleşir onOptionsItemSelected.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; go home
            Intent intent = new Intent(this, HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

1
Benim durumumda, onOptionsItemSelected (MenuItem öğesi) olayı olmayacak o sayfaya geri düğmesi eklemek istiyorum ... Bunun için başka bir çözüm var mı ??
Vidhi

1
getActionBar().setDisplayHomeAsUpEnabled(true);Show back düğmesi için önce onCreateMethod'unuzu eklemelisiniz
aletede91

1
Bu şekilde yaparsanız, bir önceki etkinliğe şimdi bir kez daha sahip olsanız bile geri dönmezsiniz ve yeterince uzun devam ederseniz yığın taşması gerçekleşene kadar her zaman ileri ve ileri gidersiniz. Igor'un cevabının doğru olduğunu düşünüyorum, bu aktiviteyi finish () ile durdurmalı ve çerçevenin sizi çalışan önceki aktivite örneğine geri döndürmesine izin vermelisiniz.
Reijo Korhonen

2
this.onBackPressed();kullanıcı geri düğmesini tıkladığında yöntemi kullan .
CaptRisky

47

Resmi çözüm

Bu iki kod parçacığını SubActivity'nize ekleyin

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

alt sdk'yi desteklemek için tezahür etmek için meta veri ve parentActivity ekleyin.

 <application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.SubActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

Buradan referans alın: http://developer.android.com/training/implementing-navigation/ancestral.html


5
Not: geriye dönük uyumluluk için destek kitaplıkları kullanıyorsanız, "getActionBar ()" yerine "getSupportActionBar ()" kullanmanız gerekir. Bu en eksiksiz ve resmi cevaptır.
Christopher Bull

32

Bu satırları onCreate () öğesine ekle

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
   actionBar.setHomeButtonEnabled(true);
   actionBar.setDisplayHomeAsUpEnabled(true);

ve onOptionItemSelected içinde

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                //Write your logic here
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Bu size yardımcı olacağını umuyoruz ..!


27

Bu kodu deneyin, yalnızca geri düğmesine ihtiyacınız varsa dikkate alır.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //YOUR CODE
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //YOUR CODE
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

17

Senin Açık onCreateyöntem eklenti:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

AndroidManifest.xmlÜst etkinliği tanımlarken (eylem çubuğundaki geri düğmesine basıldığında çağrılacak etkinlik):

Senin içinde <activity>Manifest tanımı, satırı ekleyin:

android:parentActivityName="com.example.activities.MyParentActivity"

Manifest kodunu yalnızca 4.0 öncesi cihazları desteklemek istiyorsanız girmeniz gerekir. Kodun ilk biti mevcut kütüphaneler için daha iyi bir çözümdür.
Louie Bertoncin

8

Biraz geç kaldığımı biliyorum, ancak belgeleri doğrudan takip ederek bu sorunu çözebildim .

Meta veri etiketini şuraya ekleyin AndroidManifest.xml(böylece sistem bilir)

 <activity
        android:name=".Sub"
        android:label="Sub-Activity"
        android:parentActivityName=".MainChooser"
        android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainChooser" />
    </activity>

Ardından, cihazınızdaki geri (yukarı) düğmesini etkinleştirin. MainActivity

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_child);
 
    // my_child_toolbar is defined in the layout file 
    Toolbar myChildToolbar =
        (Toolbar) findViewById(R.id.my_child_toolbar);
    setSupportActionBar(myChildToolbar);
 
    // Get a support ActionBar corresponding to this toolbar 
    ActionBar ab = getSupportActionBar();
 
    // Enable the Up button 
    ab.setDisplayHomeAsUpEnabled(true);
    } 

Ve hepiniz hazır olacaksınız!

Kaynak: Android Geliştirici Belgeleri


6

Yukarıdakilerin birçok yararlı çözüm olduğunu biliyorum, ancak bu sefer bu makaleyi okudum (sdk 23 ile mevcut Android Studio 2.1.2) yukarıdaki bazı yöntemler işe yaramıyor.

Alt etkinlik için çözümüm MapsActivity

İlk olarak, parentActivity'yi

AndroidManifest.xml

bunun gibi :

<application ... >
    ...
    <!-- Main activity (which has no parent activity) -->
    <activity
        android:name="com.example.myapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        .....
        android:parentActivityName=".MainActivity" >
        <!-- Support Parent activity for Android 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myapp.MainActivity" />
    </activity>
</application>

İkinci olarak, alt Faaliyetinizin AppCompatActivityFragmentActivity'yi değil, genişletildiğinden emin olun .

Üçüncü olarak, geçersiz kılma onOptionsItemSelected()yöntemi

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon action bar is clicked; go to parent activity
                this.finish();
                return true;
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Umarım bu yardımcı olur!


4

Bunu deneyin, onCreate () cihazınızda

 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true);

Ve tıkırtı için,

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon in action bar clicked; goto parent activity.
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

4

Bunu başarmak için sadece iki adım vardır,

1. Adım: AndroidManifest.xmlBu parametreye gidin ve <activity>etikete ekleyin -android:parentActivityName=".home.HomeActivity"

Misal:

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

2. Adım: Önceki sayfanıza / etkinliğinize ActivityDetailekleyinaction

Misal:

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

4

onCreate yöntemi yazma-

Toolbar toolbar = findViewById(R.id.tool);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
    finish();
}

ve bu xml dosyası

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">

ve styles.xml dosyasında bunu

Theme.AppCompat.Light.NoActionBar

tüm yapmamız gereken bu.


4

Bu basit ve benim için çok iyi çalışıyor

bunu onCreate () yönteminin içine ekle

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

bunu oncreate () yönteminin dışında ekle

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

3

Senin içinde onCreate()yöntemle bu satırı ekleyin

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

ve aynı Etkinlikte, düğme tıklamasını işlemek için bu yöntemi ekleyin

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

2

Bu şekilde çözdüm

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

@Override
public void onBackPressed(){
    Intent backMainTest = new Intent(this,MainTest.class);
    startActivity(backMainTest);
    finish();
}

1

Ekrana geri dönmek için çalışma kodum.

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:

        Toast.makeText(getApplicationContext(), "Home Clicked",
                Toast.LENGTH_LONG).show();

        // go to previous activity
        onBackPressed();

        return true;

    }

    return super.onOptionsItemSelected(item);
}

1
 public void initToolbar(){
       //this set back button 
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       //this is set custom image to back button
       getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}


//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}

1
ActionBar actionBar=getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

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

    return super.onOptionsItemSelected(item);
}

1

Cevap vermek için çok geç olabilir ama bence daha kısa ve daha işlevsel bir çözümüm var.

// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

// After the method's closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

1

Oncreate () içinde; bu satırı yaz

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

o sınıfta aşağıdaki yöntemi uygulayın

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        // app icon in action bar clicked; go home
      onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

1

Manifest.xml

<activity
            android:name=".Activity.SecondActivity"
            android:label="Second Activity"
            android:parentActivityName=".Activity.MainActivity"
            android:screenOrientation="portrait"></activity>

1

Kotlin'de işlem çubuğu geri düğmesini görüntülemek için onu uygulamanın 2 yolu vardır

1. Android tarafından sağlanan varsayılan İşlem Çubuğunu kullanma - Etkinliğiniz Eylem Çubuğu olan bir tema kullanmalıdır - örneğin: Theme.AppCompat.Light.DarkActionBar

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val actionBar = supportActionBar
    actionBar!!.title = "your title"
    actionBar.setDisplayHomeAsUpEnabled(true)
    //actionBar.setDisplayHomeAsUpEnabled(true)
}

override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

2. Kendi Eylem Çubuğunuzu tasarlayın - varsayılan Eylem Çubuğunu devre dışı bırakın - örneğin: Theme.AppCompat.Light.NoActionBar - activity.xml dosyasına düzen ekleyin

    <androidx.appcompat.widget.Toolbar
     android:id="@+id/main_toolbar"
     android:layout_width="match_parent"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent">

     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:layout_editor_absoluteX="16dp">

         <TextView
             android:id="@+id/main_toolbar_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="Your Title"
             android:textSize="25sp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

     </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.appcompat.widget.Toolbar>
  • onCreate
override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     setSupportActionBar(findViewById(R.id.main_toolbar))
 }
  • kendi düğmenizi yaratın
<?xml version="1.0" encoding="utf-8"?>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto" >

 <item
     android:id="@+id/main_action_toolbar"
     android:icon="@drawable/ic_main_toolbar_item"
     android:title="find"
     android:layout_width="80dp"
     android:layout_height="35dp"
     app:actionLayout="@layout/toolbar_item"
     app:showAsAction="always"/>

</menu>
  • YourActivity.kt içinde
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
     menuInflater.inflate(R.menu.main_toolbar_item, menu)

     leftToolbarItems = menu!!.findItem(R.id.main_action_toolbar)
     val actionView = leftToolbarItems.actionView
     val badgeTextView = actionView.findViewById<TextView>(R.id.main_action_toolbar_badge)
     badgeTextView.visibility = View.GONE

     actionView.setOnClickListener {
         println("click on tool bar")
     }
     return super.onCreateOptionsMenu(menu)
 }

0

OnCreate işlevine aşağıdaki kodu ekleyin:

getSupportActionBar () setDisplayHomeAsUpEnabled (doğru).;

Sonra geçersiz kılın: @OptionsItemSelected (MenuItem item) {onBackPressed (); geri dönüş; }


0

Güncellenmiş sürümünde getActionBar () çalışmıyor!

Bunun yerine, bunu bu şekilde yapabilirsiniz

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

android başlık çubuğundaki geri düğmesi ekle, bu 2020'de size yardımcı olur


Son birkaç cevabınız aynı siteye bağlanır. Herhangi bir şekilde o siteyle ilişkilendiriliyor / ilişkilendiriliyor musunuz? Eğer bağlıysanız, bu bağlılığı yayında belirtmelisiniz . Bağlantıyı açıklamazsanız spam olarak kabul edilir. Bakınız: "İyi" kendini tanıtmanın anlamı nedir? , kendi kendine tanıtım hakkında bazı ipuçları ve öneriler , Stack Overflow için "spam" tam tanımı nedir? ve Bir şeyi spam yapan şey .
Makyen
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.