Saya memiliki aktivitas dengan listview. Saat pengguna mengklik item, item "viewer" terbuka:
List1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Intent nextScreen = new Intent(context,ServicesViewActivity.class);
String[] Service = (String[])List1.getItemAtPosition(arg2);
//Sending data to another Activity
nextScreen.putExtra("data", datainfo);
startActivityForResult(nextScreen,0);
overridePendingTransition(R.anim.right_enter, R.anim.left_exit);
}
});
Ini berfungsi dengan baik, tetapi pada bilah tindakan panah kembali di sebelah ikon aplikasi tidak diaktifkan. Apakah saya melewatkan sesuatu?
java
android
android-3.0-honeycomb
Joaolvcm
sumber
sumber
getActionBar().setDisplayHomeAsUpEnabled(true);
di onCreate danswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
dionOptionsItemSelected
? keduanya di ServicesViewActivityJawaban:
Selvin sudah memposting jawaban yang benar. Di sini, solusinya dalam kode cantik:
public class ServicesViewActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // etc... getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; default: return super.onOptionsItemSelected(item); } } }
Fungsi ini
NavUtils.navigateUpFromSameTask(this)
mengharuskan Anda untuk menentukan aktivitas induk di file AndroidManifest.xml<activity android:name="com.example.ServicesViewActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.ParentActivity" /> </activity>
Lihat di sini untuk bacaan lebih lanjut.
sumber
getActionBar().setDisplayHomeAsUpEnabled(true);
jika Anda menggunakan pustaka dukungan.Pastikan Tombol Beranda ActionBar Anda diaktifkan di Aktivitas:
Android, API 5+:
@Override public void onBackPressed() { ... super.onBackPressed(); }
ActionBarSherlock dan App-Compat, API 7+:
@Override public void onCreate(@Nullable Bundle savedInstanceState) { ... getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
Android, API 11+:
@Override public void onCreate(@Nullable Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); }
Contoh
MainActivity
yang meluasActionBarActivity
:public class MainActivity extends ActionBarActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // API 5+ solution onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } } }
Dengan cara ini semua aktivitas yang Anda inginkan dapat memiliki backpress.
Android, API 16+:
http://developer.android.com/training/implementing-navigation/ancestral.html
AndroidManifest.xml
:<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.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- The meta-data element is needed for versions lower than 4.1 --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application>
Contoh
MainActivity
yang meluasActionBarActivity
:public class MainActivity extends ActionBarActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Back button getSupportActionBar().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); } }
sumber
Untuk mengaktifkan tombol kembali ActionBar Anda jelas membutuhkan ActionBar di Aktivitas Anda. Ini diatur oleh tema yang Anda gunakan. Anda dapat menyetel tema untuk Aktivitas Anda di
AndroidManfiest.xml
. Jika Anda menggunakan misalnya@android:style/Theme.NoTitleBar
tema, Anda tidak memiliki ActionBar. Dalam hal ini panggilan kegetActionBar()
akan mengembalikan nol. Jadi, pastikan Anda memiliki ActionBar terlebih dahulu.Langkah selanjutnya adalah menyetel
android:parentActivityName
ke aktivitas yang ingin Anda navigasi jika Anda menekan tombol kembali. Ini harus dilakukan diAndroidManifest.xml
juga.Sekarang Anda dapat mengaktifkan tombol kembali dalam
onCreate
metode aktivitas "anak" Anda.@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); }
Sekarang Anda harus menerapkan logika untuk tombol kembali. Anda cukup mengganti
onOptionsItemSelected
metode dalam aktivitas "anak" Anda dan memeriksa id dari tombol kembali yaituandroid.R.id.home
.Sekarang Anda dapat mengaktifkan metode
NavUtils.navigateUpFromSameTask(this);
TAPI jika Anda tidak menentukannya diandroid:parentActivityName
dalam Anda,AndroidManifest.xml
ini akan merusak aplikasi Anda.Terkadang ini yang Anda inginkan karena mengingatkan Anda bahwa Anda lupa "sesuatu". Jadi jika ingin mencegahnya, Anda bisa memeriksa apakah aktivitas Anda memiliki induk yang menggunakan
getParentActivityIntent()
metode tersebut. Jika ini mengembalikan null, Anda belum menentukan induknya.Dalam hal ini Anda dapat mengaktifkan
onBackPressed()
metode yang pada dasarnya sama seperti jika pengguna menekan tombol kembali pada perangkat. Penerapan yang baik yang tidak pernah membuat aplikasi Anda mogok adalah:@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (getParentActivityIntent() == null) { Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!"); onBackPressed(); } else { NavUtils.navigateUpFromSameTask(this); } return true; default: return super.onOptionsItemSelected(item); } }
Harap perhatikan bahwa animasi yang dilihat pengguna berbeda antara
NavUtils.navigateUpFromSameTask(this);
danonBackPressed()
.Terserah Anda jalan mana yang Anda ambil, tetapi saya menemukan solusi yang membantu, terutama jika Anda menggunakan kelas dasar untuk semua aktivitas Anda.
sumber
File AndroidManifest:
<activity android:name=".activity.DetailsActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="br.com.halyson.materialdesign.activity.HomeActivity" /> </activity>
tambahkan DetailsActivity:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
berhasil:]
sumber
Anotasi Android:
@OptionsItem(android.R.id.home) void homeSelected() { onBackPressed(); }
Sumber: https://github.com/excilys/androidannotations
sumber
Saya pikir
onSupportNavigateUp()
cara termudah dan terbaik untuk melakukannyaperiksa kode di tautan ini Klik di sini untuk kode lengkap
sumber
https://stackoverflow.com/a/46903870/4489222
Untuk mencapai ini, hanya ada 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);} }
sumber
Dalam metode OnCreate tambahkan ini:
if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
Kemudian tambahkan metode ini:
@Override public boolean onSupportNavigateUp() { onBackPressed(); return true; }
sumber
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
dalam
onCreated
metode untuk api baru.sumber
Jika Anda menggunakan Toolbar, saya menghadapi masalah yang sama. Saya menyelesaikannya dengan mengikuti dua langkah ini
<activity android:name=".activity.SecondActivity" android:parentActivityName=".activity.MainActivity"/>
Toolbar toolbar = findViewById(R.id.second_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
sumber
Langkah-langkah berikut sudah cukup untuk tombol kembali:
Langkah 1: Kode ini harus ada di Manifest.xml
<activity android:name=".activity.ChildActivity" android:parentActivityName=".activity.ParentActivity" android:screenOrientation="portrait"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".activity.ParentActivity" /></activity>
Langkah 2: Anda tidak akan memberi
dalam Aktivitas Orang Tua Anda saat memulai Aktivitas Anak.
Langkah 3: Jika Anda perlu kembali ke Aktivitas Orang Tua dari Aktivitas Anak, maka Anda cukup memberikan kode ini untuk Aktivitas Anak.
startActivity(new Intent(ParentActivity.this, ChildActivity.class));
sumber
Berdasarkan jawaban Jared, saya harus mengaktifkan dan mengimplementasikan perilaku tombol kembali bilah tindakan di beberapa aktivitas dan membuat kelas pembantu ini untuk mengurangi duplikasi kode.
public final class ActionBarHelper { public static void enableBackButton(AppCompatActivity context) { if(context == null) return; ActionBar actionBar = context.getSupportActionBar(); if (actionBar == null) return; actionBar.setDisplayHomeAsUpEnabled(true); } }
Penggunaan dalam suatu aktivitas:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... ActionBarHelper.enableBackButton(this); }
sumber