bagaimana cara mengganti tombol kembali bilah tindakan di android?

95

Saya ingin menyesuaikan tombol kembali aktivitas di bilah tindakan, bukan di tombol kembali hard key. Saya telah mengganti onBackPressed()metode ini. Ini berfungsi dengan tombol kembali emulator saya, tetapi tidak dengan tombol kembali bilah tindakan.

Saya ingin itu terjadi dengan bilah tindakan. Bagaimana saya bisa melakukan ini?

Ini kode saya:

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

Saya telah menggunakan toast ini apakah menekan kembali berfungsi atau tidak tetapi implementasi aktual berubah seperti untuk kembali ke aktivitas sebelumnya. Tapi ini tidak berfungsi dengan tombol yang ada di atas bilah tindakan (selain judul aktivitas).

Tolong, siapa pun bisa menjelaskan masalahnya kepada saya.

GK
sumber

Jawaban:

210

Saya rasa Anda ingin menimpa pengoperasian klik tombol home. Anda dapat mengganti fungsi ini seperti ini dalam aktivitas Anda.

@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;
}
ibrahimyilmaz.dll
sumber
1
Noah Ibrahim, Sebenarnya ada tombol Back di pojok kiri atas seperti tombol back di browser. Saat saya mengklik tombol itu, saya ingin kembali ke aktivitas sebelumnya. Tidak seperti kode u yang diposting di atas.
GK
4
tambahkan super.onBackPressed (); untuk itu
redestructa
2
Ini berhasil untuk saya setelah saya berubah return true;menjadi return super.onOptionsItemSelected(item). Kemudian Anda dapat membuat sesuatu terjadi saat pengguna mengeklik tombol kembali bilah tindakan, tetapi masih memiliki fungsi tombol yang sama.
kumaheiyama
Dengan teknik ini tombol panah kembali merespons dengan terlambat. Berarti saya harus menunggu sebentar agar acara dipecat. Juga tidak muncul pemilih pada tombol ini untuk efek saat menekannya
Gopal Singh Sirvi
Tidak berhasil untuk saya. Ketika saya men-debug, saya menemukan id tombol home dan id tombol diklik berbeda.
viper
45

Jika Anda ingin tombol kembali ActionBar berperilaku sama seperti tombol kembali perangkat keras:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }
ruX
sumber
1
kasus android.R.id.hometidak menembak
Trancer
2
@Trancer jika Anda menggunakannya di Fragment, Anda juga harus memanggil setHasOptionsMenu(true)metode onCreate fragmen
wilddev
10

Dua hal yang perlu diingat bahwa pengguna dapat menekan tombol kembali atau menekan tombol beranda bilah tindakan.
Jadi, jika Anda ingin mengarahkannya ke tujuan yang sama maka Anda dapat melakukannya.

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

Ini akan membawa pengguna ke maksud dengan menekan salah satu tombol atau tombol bilah tindakan.

ssi-anik.dll
sumber
kasus android.R.id.hometidak menembak
Trancer
@Trancer, Sudah hampir 1,5+ tahun. Dan saya tidak melakukan android sekarang. Saya tidak dapat membantu Anda sekarang. Maaf.
ssi-anik
jadi apa solusinya?
GA1
7
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }
Krunal Shah
sumber
2
Anda bisa menambahkannya sebagai komentar. Ini kurang lebih sama dengan jawaban yang diterima.
Sufian
7

Maaf saya adalah jawaban yang terlambat, tetapi untuk siapa pun yang tiba di halaman ini dengan pertanyaan yang sama, saya telah mencoba yang di atas:

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

tapi ini gagal menangkap penekanan tombol "Kembali".

Akhirnya saya menemukan metode yang bekerja untuk saya di https://stackoverflow.com/a/37185334/3697478 yang menimpa "onSupportNavigateUp ()" karena saya menggunakan bilah tindakan dari pustaka dukungan "AppCompatActivity". (Ada "onNavigateUp ()" yang setara untuk pustaka bilah tindakan / bilah tindakan yang lebih baru.)

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

dan saya menghapus bagian "android: parentActivityName =". MainActivity "dari file manifes.

Stephen Bridgett
sumber
4

Saya telah mencapai ini, hanya dengan menggunakan dua langkah,

Langkah 1: Buka AndroidManifest.xml dan tambahkan parameter di tag - android: parentActivityName = ". Home.HomeActivity"

contoh:

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

Langkah 2: di ActivityDetail tambahkan tindakan Anda untuk 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);
 }
Vivek Hande
sumber
2

Jika Anda ingin kembali ke instance Aktivitas sebelumnya dengan menekan tombol beranda ActionBar, tanpa membuatnya kembali, Anda bisa mengganti metode getParentActivityIntent untuk menggunakan metode dari back-stack:

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

EDIT:
Anda juga dapat mencapai hasil yang sama dengan
menyetel launchMode aktivitas induk Anda ke singleTop.
Jadi setel android:launchMode="singleTop"ke aktivitas induk di manifes Anda.
Atau Anda bisa menggunakan flag FLAG_ACTIVITY_CLEAR_TOP dengan maksud UP.
referensi: Menyediakan Navigasi Atas

Leo Droidcoder
sumber
2

(1) Tambahkan aktivitas Induk untuk aktivitas anak Anda (AndroidManifest.xml)

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

(2) mengganti metode onSupportNavigateUp di dalam aktivitas anak

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}
Hariharan Kanakaraja
sumber
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();
}
Roshaan Qurban
sumber
0

Ada beberapa cara untuk mengatur tombol kembali di bar:

1) metode .setDisplayHomeAsUpEnabled(true);akan melakukannya, dan kemudian Anda dapat menggantiandroid.R.id.home

2) menambahkan <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />Manifes Android, tetapi dalam kasus ini Anda tidak dapat mengganti android.R.id.homedi OnOptionsMenuSelected.

.. bagi mereka yang bertanya-tanya mengapa itu tidak berhasil untuk mereka ...

Jiří
sumber