J'essaie d'afficher un Back button
sur le Action bar
pour déplacer la page/l'activité précédente ou vers la page principale (première ouverture) . Et je ne peux pas le faire.
mon code.
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
le code est dans onCreate
.
bien c'est simple pour montrer le bouton de retour
actionBar.setDisplayHomeAsUpEnabled(true);
et puis vous pouvez personnaliser l'événement de retour à onOptionsItemSelected
case Android.R.id.home:
this.finish();
return true;
Je pense que onSupportNavigateUp()
est la meilleure et la plus simple façon de le faire, vérifiez les étapes ci-dessous. L'étape 1 est nécessaire, la deuxième étape est une alternative.
Étape 1: bouton retour: Ajoutez cette ligne dans la méthode onCreate()
pour afficher le bouton retour.
assert getSupportActionBar() != null; //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
Etape 2 implémentation du clic de retour: Remplacer cette méthode
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
c'est ce que vous avez terminé
OR Étape 2 Alternative: Vous pouvez ajouter une méta à l'activité dans le fichier manifeste en tant que
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="MainActivity" />
Edit: / Si vous n'utilisez pas AppCompat
Activity, n'utilisez pas support
Word, vous pouvez utiliser
getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`
// And override this method
@Override
public boolean onNavigateUp(){
finish();
return true;
}
Merci à @atariguy pour son commentaire.
La magie 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 SubActivity
@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);
}
ajoutez les méta-données et parentActivity au fichier manifest pour prendre en charge la valeur inférieure de sdk.
<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 dans 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);
}
}
J'espère que ceci vous aidera..!
Essayez ce code, ne le considère que si vous avez besoin du bouton Retour.
@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 méthode onCreate
, ajoutez:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Lors de la définition dans l'activité AndroidManifest.xml
(l'activité qui sera appelée une fois le bouton Précédent dans la barre d'actions enfoncée):
Dans votre définition <activity>
du manifeste, ajoutez la ligne:
Android:parentActivityName="com.example.activities.MyParentActivity"
Je sais que je suis un peu en retard, mais j'ai pu résoudre ce problème en suivant directement le docs .
Ajoutez la balise meta-data à AndroidManifest.xml
(pour que le système 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>
Activez ensuite le bouton de sauvegarde (haut) 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 mis en place!
Je sais que les solutions ci-dessus sont nombreuses et utiles, mais cette fois-ci, j'ai lu cet article (Android Studio 2.1.2 actuel doté de sdk 23).
Ci-dessous ma solution pour la sous-activité est MapsActivity
Tout d’abord, vous devez ajouter parentActivity dans
AndroidManifest.xml
comme ça :
<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, assurez-vous que votre sous-activité étend AppCompatActivity
, pas FragmentActivity.
Troisièmement, remplacer la méthode onOptionsItemSelected()
@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);
}
}
J'espère que cela aidera!
Pour y parvenir, il suffit de deux étapes,
Étape 1: Accédez à AndroidManifest.xml
et ajoutez ce paramètre à la balise <activity>
- Android:parentActivityName=".home.HomeActivity"
Exemple:
<activity
Android:name=".home.ActivityDetail"
Android:parentActivityName=".home.HomeActivity"
Android:screenOrientation="portrait" />
Étape 2: Dans ActivityDetail
, ajoutez votre action
pour la page/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 write-
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 c'est 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.xml le changer en
Theme.AppCompat.Light.NoActionBar
c'est tout ce que nous devons faire.
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();
}
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);
}
}
Il pourrait être trop tard pour répondre mais j’ai une solution plus courte et plus fonctionnelle à mon avis.
// 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;
}
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);
}
mon code de travail pour revenir à 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;
}
C'est simple et fonctionne très bien pour moi
ajouter ceci à l'intérieur de la méthode onCreate ()
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ajoute ceci en dehors de la méthode oncreate ()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
Dans oncreate (); écrire cette ligne->
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
puis mettre en œuvre la méthode ci-dessous dans cette classe
@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);
}
}
Manifest.xml
<activity
Android:name=".Activity.SecondActivity"
Android:label="Second Activity"
Android:parentActivityName=".Activity.MainActivity"
Android:screenOrientation="portrait"></activity>
Ajoutez le code ci-dessous dans la fonction onCreate:
getSupportActionBar (). setDisplayHomeAsUpEnabled (true);
Et puis écrasez: @Override public boolean onOptionsItemSelected (élément MenuItem) {onBackPressed (); retourne vrai; }