Afficher le bouton de retour sur la barre d'action
j'essaie d'afficher un Back button
sur le Action bar
pour déplacer la page précédente/activité ou à la page principale (ouverture).
Et je ne peux pas le faire.
mon code.
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
le code est dans onCreate
.
16 réponses
Eh bien, il s'agit d'un simple pour afficher le bouton Retour
actionBar.setDisplayHomeAsUpEnabled(true);
et ensuite vous pouvez personnaliser l'événement de dos à onOptionsItemSelected
case android.R.id.home:
this.finish();
return true;
je pense que onSupportNavigateUp()
est la meilleure et la plus facile façon de le faire, vérifier le code ci-dessous.
si vous voulez par programmation Ajouter cette ligne dans onCreate()
méthode
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Note: assurez-vous que Actionbar n'est pas null.
et remplacer cette méthode
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
c'est ça
OU Non par programmation, vous pouvez ajouter des méta-l'activité dans le fichier de manifeste comme
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="MainActivity" />
Edit: Si vous n'êtes pas à l'aide de AppCompat
Activité, alors n'utilisez pas support
word, vous pouvez utiliser
getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`
@Override
public boolean onNavigateUp(){
finish();
return true;
}
merci à @atariguy pour vos commentaires.
La magie qui se passe dans 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);
}
}
solution officielle
ajoutez ces deux extraits de code à votre sous-activité
@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);
}
ajouter les méta-données et la parentactivité pour manifester pour supporter le sdk inférieur.
<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>
référence ici: http://developer.android.com/training/implementing-navigation/ancestral.html
ajouter ces lignes à onCreate()
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
et en option selected
@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);
}
}
espérons que cela vous aidera..!
essayez ce code, considère que si vous avez besoin du bouton arrière.
@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;
}
sur votre onCreate
méthode ajouter:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
tout en définissant dans le AndroidManifest.xml
l'activité parent (l'activité qui sera appelée une fois que le bouton précédent dans la barre d'action est pressé):
dans votre <activity>
définition sur le Manifeste, ajouter la ligne:
android:parentActivityName="com.example.activities.MyParentActivity"
je sais que je suis un peu en retard, mais j'ai pu corriger ce problème en suivant le docs directement.
ajouter la balise meta-data à AndroidManifest.xml
(pour que le système le sache)
<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>
ensuite, activez le bouton back (up) dans votre 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);
}
Et, vous serez tous ensemble!
Source: Android Developer Documentation
je sais que ce qui précède sont de nombreuses solutions utiles, mais cette fois je lis cet article (actuel Studio Android 2.1.2 avec sdk 23) une méthode ci-dessus ne fonctionne pas.
ci-dessous est ma solution pour la sous-activité est MapsActivity
tout d'abord, vous devez ajouter l'activité parentale dans
AndroidManifest.xml
comme ceci:
<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>
deuxièmement, assurer que votre sous-Activité s'étend AppCompatActivity
, pas
FragmentActivity.
en Troisième lieu, remplacer onOptionsItemSelected()
méthode
@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);
}
}
Espère que cela va vous aider!
pour y parvenir, il y a simplement deux étapes,
Étape 1: Allez à AndroidManifest.xml
et ajoutez ce paramètre dans la balise <activity>
- android:parentActivityName=".home.HomeActivity"
exemple:
<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />
Étape 2: dans ActivityDetail
ajouter votre action
pour la page/l'activité précédente
exemple:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
dans la méthode onCreate écriture
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();
}
et voici le fichier 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">
et dans styles.changer le format en
Theme.AppCompat.Light.NoActionBar
c'est tout ce que nous avons à faire.
essayez ceci, Dans votre onCreate()
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
et pour 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);
}
}
J'ai résolu de cette façon
@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();
}
mon code de travail pour retourner l'écran.
@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);
}
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;
}
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);
}