Tampilkan tombol kembali pada bilah tindakan


181

Saya mencoba untuk menampilkan Back buttonpada Action baruntuk memindahkan halaman / aktivitas sebelumnya atau ke halaman utama (pembukaan pertama). Dan saya tidak bisa melakukannya.

kode saya.

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

kode ini di onCreate.


19
Gunakan: getSupportActionBar (). SetDisplayHomeAsUpEnabled (true);
Sukitha Udugamasooriya

@SukithaUdugamasooriya Terima kasih banyak
Sardorbek Rkh

Jawaban:


207

nah ini sederhana untuk menunjukkan tombol kembali

actionBar.setDisplayHomeAsUpEnabled(true);

dan kemudian Anda dapat mengkustomisasi acara kembali di onOptionsItemSelected

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

saya menambahkan baris di atas di dalam onOptionsItemSelected (item MenuItem), karena saya sudah memiliki menu pada bad action yang mencantumkan id untuk mengarahkan kembali opsi menu, id rumah tidak berfungsi ketika diklik

Jika Anda mengalami perilaku aneh (seperti pada: Anda menggunakan tombol kembali (R.id.home) dari sebuah fragmen dan akhirnya menutup aktivitas), pastikan Anda TIDAK memiliki "android: noHistory" yang ditetapkan pada aktivitas ini, karena jika Anda melakukannya, bahkan kembali dari sebuah fragmen ke "ikhtisar" aktivitas akan menyelesaikannya.
Igor

2
Pastikan Anda mengatur aktivitas induk di AndroidMenifest.xml agar tombol R.id.home berfungsi.
Leap Hawk

192

Saya pikir onSupportNavigateUp()ini cara terbaik dan termudah untuk melakukannya, periksa langkah-langkah di bawah ini. Langkah 1 diperlukan, langkah kedua memiliki alternatif.

Langkah 1 menampilkan tombol kembali: Tambahkan baris ini dalam onCreate()metode untuk menampilkan tombol kembali.

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

Langkah 2 implementasi klik belakang: Ganti metode ini

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

begitulah Anda selesai
ATAU Langkah 2 Alternatif: Anda dapat menambahkan meta ke aktivitas dalam file manifes sebagai

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

Sunting: Jika Anda tidak menggunakan AppCompatKegiatan maka jangan gunakan supportkata, Anda dapat menggunakan

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

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

Terima kasih kepada @atariguy untuk komentar.


2
Solusi ini berfungsi dengan baik ketika Anda perlu mengirim data kembali ke aktivitas induk atau jika Anda ingin mempertahankan nilai EditText dalam aktivitas induk. Saya mencoba onOptionsItemSelectedsolusi tetapi gagal melakukannya.
weeix

3
Solusi terbaik +10.
Satheeshwaran

3
Jika Anda tidak menggunakan pustaka dukungan untuk Actionbar, ubah sebagai berikut: getActionBar().setDisplayHomeAsUpEnabled(true); @Override public boolean onNavigateUp(){ finish(); return true; }
atariguy

1
Fenomenal. +1. Sederhana. Anggun. Cantik. :)
Rohit Kumar

1
Terima kasih atas bantuan Anda. Dengan menggunakan manifes, itu tidak berfungsi tetapi menggunakan kode itu berfungsi
santosh devnath

70

Keajaiban terjadi di 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
Dalam kasus saya, saya ingin menambahkan tombol kembali di halaman itu di mana event onOptionsItemSelected (itemItemItem) tidak akan ada ... Apakah ada solusi lain untuk itu ??
Vidhi

1
Anda harus menambahkan getActionBar().setDisplayHomeAsUpEnabled(true);onCreateMethod Anda terlebih dahulu untuk tombol show back
aletede91

1
Saya pikir jika Anda melakukan cara ini, Anda tidak kembali bahkan jika Anda memulai aktivitas sebelumnya lagi sekarang memiliki satu instace lebih dan Anda terus maju dan maju sampai stack overflow terjadi jika Anda terus cukup lama. Saya pikir jawaban Igor benar, Anda harus menghentikan aktivitas ini dengan selesai () dan biarkan kerangka membuat Anda kembali ke instance aktivitas sebelumnya yang berjalan.
Reijo Korhonen

2
gunakan this.onBackPressed();metode ketika pengguna mengklik tombol kembali.
CaptRisky

47

Solusi resmi

Tambahkan dua cuplikan kode itu ke SubActivity Anda

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

tambahkan meta-data dan parentActivity ke manifes untuk mendukung sdk rendah.

 <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>

Referensi di sini: http://developer.android.com/training/implementing-navigation/ancestral.html


5
Catatan: jika menggunakan pustaka dukungan untuk kompatibilitas mundur, Anda harus menggunakan "getSupportActionBar ()" alih-alih "getActionBar ()". Ini adalah jawaban yang paling lengkap dan resmi.
Christopher Bull

32

Tambahkan baris ini ke onCreate ()

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

dan di onOptionItemSelected

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

Semoga ini bisa membantu Anda ..!


27

Coba kode ini, pertimbangkan hanya jika Anda memerlukan tombol kembali.

@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

Pada onCreatemetode Anda, tambahkan:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Sementara mendefinisikan dalam AndroidManifest.xml aktivitas induk (aktivitas yang akan dipanggil setelah tombol kembali di bilah tindakan ditekan):

Dalam <activity>definisi Anda tentang Manifest, tambahkan baris:

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

Anda hanya perlu memasukkan kode Manifest jika Anda ingin mendukung perangkat pra-4.0. Bit kode pertama adalah solusi yang lebih baik untuk perpustakaan saat ini.
Louie Bertoncin

8

Saya tahu saya agak terlambat, tetapi dapat memperbaiki masalah ini dengan mengikuti dokumen secara langsung.

Tambahkan tag meta-data ke AndroidManifest.xml(agar sistem tahu)

 <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>

Selanjutnya, aktifkan tombol kembali (atas) di 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);
    } 

Dan, Anda semua akan siap!

Sumber: Dokumentasi Pengembang Android


6

Saya tahu bahwa solusi di atas banyak membantu, tetapi kali ini saya membaca artikel ini (Android Studio 2.1.2 saat ini dengan sdk 23) beberapa metode di atas tidak bekerja.

Di bawah ini solusi saya untuk sub kegiatan adalah MapsActivity

Pertama, Anda perlu menambahkan parentActivity di

AndroidManifest.xml

seperti ini :

<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>

Kedua, pastikan bahwa sub-Aktivitas Anda meluas AppCompatActivity, bukan FragmentActivity.

Ketiga, onOptionsItemSelected()metode override

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

Semoga ini bisa membantu!


4

Coba ini, Di onCreate Anda ()

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

Dan untuk clickevent,

@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

Untuk mencapai ini, hanya ada dua langkah,

Langkah 1: Pergi ke AndroidManifest.xmldan tambahkan parameter ini di<activity> tag -android:parentActivityName=".home.HomeActivity"

Contoh:

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

Langkah 2: ActivityDetailTambahkanaction halaman / aktivitas sebelumnya

Contoh:

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

4

dalam metode menulis onCreate

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

dan ini adalah file xml-

<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">

dan di styles.xml ubah ke

Theme.AppCompat.Light.NoActionBar

ini semua yang harus kita lakukan.


4

Ini sederhana dan bekerja dengan baik untuk saya

tambahkan ini di dalam metode onCreate ()

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

tambahkan metode oncreate () di luar ini

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

3

Dalam onCreate()metode Anda, tambahkan baris ini

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

dan, dalam Kegiatan yang sama, tambahkan metode ini untuk menangani klik tombol

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

2

Saya Dipecahkan dengan cara ini

@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

kode kerja saya untuk kembali layar.

@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

Mungkin sudah terlambat untuk menjawab tetapi saya memiliki solusi yang lebih pendek dan lebih fungsional menurut saya.

// 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

Di oncreate (); tulis baris ini->

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

kemudian implementasikan metode di bawah ini di kelas itu

@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

Untuk menampilkan kembali tombol aksi bar di Kotlin ada 2 cara untuk mengimplementasikannya

1. menggunakan Action Bar default yang disediakan oleh Android - Aktivitas Anda harus menggunakan tema yang memiliki Action Bar - misalnya: 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. Rancang Bilah Tindakan Anda sendiri - nonaktifkan Bilah Tindakan default - misalnya: Theme.AppCompat.Light.NoActionBar - tambahkan tata letak ke aktivitas Anda.xml

    <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))
 }
  • buat tombol Anda sendiri
<?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>
  • di YourActivity.kt
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

Tambahkan kode di bawah ini dalam fungsi onCreate:

getSupportActionBar (). setDisplayHomeAsUpEnabled (true);

Dan kemudian menimpa: @Override boolean publik onOptionsItemSelected (item MenuItem) {onBackPressed (); kembali benar; }


0

Dalam versi terbaru, getActionBar () tidak berfungsi!

Sebagai gantinya, Anda dapat melakukan ini dengan cara ini

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

tambahkan tombol kembali di bilah judul android ini membantu Anda di tahun 2020


Beberapa jawaban terakhir Anda keduanya terhubung ke situs yang sama. Apakah Anda terkait / berafiliasi dengan situs itu dengan cara apa pun? Jika Anda berafiliasi, Anda harus mengungkapkan afiliasi itu dalam pos . Jika Anda tidak mengungkapkan afiliasi, itu dianggap sebagai spam. Lihat: Apa yang menandakan promosi diri "Bagus"? , beberapa tips dan saran tentang promosi diri , Apa definisi yang tepat dari "spam" untuk Stack Overflow? , dan Apa yang membuat sesuatu menjadi spam .
Makyen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.