Comment implémenter le bouton Précédent ActionBar d'Android?

J'ai une activité avec une liste. Lorsque l'utilisateur clique sur l'élément, l'élément "visualiseur" s'ouvre:

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

Cela fonctionne bien, mais sur la barre d'action, la flèche arrière à côté de l'icône de l'application ne s'active pas. Est-ce que je manque quelque chose?

  • Pourquoi mon application demande-t-elle une autorisation d'identification du téléphone?
  • Android Plusieurs fichiers dex définissent Lcom / google / android / gms / common / api / zza
  • Quelle est votre convention de dénomination pour les ID d'affichage?
  • Changement de taille de texte dynamique selon la tablette
  • Zxing - Modification de la vue de la caméra -90 degrés
  • Obtenez la position de l'image actuelle affichée dans la Galerie
  • Remballage .jar-s dans Android .aar library
  • Existe-t-il une façon de style TextView de majusculer toutes ses lettres?
  • Hide System Bar dans les tablettes
  • Créer un nouveau menuInflater ou getMenuInflater () à partir de l'activité?
  • Eclipse Emulator ne répond pas
  • Gradle: avantages / inconvénients ajoutant des dépendances
  • 6 Solutions collect form web for “Comment implémenter le bouton Précédent ActionBar d'Android?”

    Selvin a déjà posté la bonne réponse, voici seulement la solution dans un code assez 😉

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

    La fonction NavUtils.navigateUpFromSameTask(this) vous oblige à définir l'activité parent dans le fichier AndroidManifest.xml

      <activity android:name="com.example.ServicesViewActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.ParentActivity" /> </activity> 

    http://developer.android.com/design/patterns/navigation.html#up-vsbackback

    Assurez-vous que votre bouton d'accueil ActionBar est activé dans l'activité:

    Android, API 5+:

     @Override public void onBackPressed() { ... super.onBackPressed(); } 

    ActionBarSherlock et App-Compat, API 7+:

     @Override public void onCreate(Bundle savedInstanceState) { ... getSupportActionBar().setDisplayHomeAsUpEnabled(true); } 

    Android, API 11+:

     @Override public void onCreate(Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); } 

    Exemple MainActivity qui étend ActionBarActivity :

     public class MainActivity extends ActionBarActivity { @Override public void onCreate(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); } } } 

    De cette façon, toutes les activités souhaitées peuvent faire l'objet d'une contrainte.

    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> 

    Exemple MainActivity qui étend ActionBarActivity :

     public class MainActivity extends ActionBarActivity { @Override public void onCreate(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); } } 

    Pour activer le bouton Back ActionBar, vous avez évidemment besoin d'un ActionBar dans votre Activité. Ceci est défini par le thème que vous utilisez. Vous pouvez définir le thème de votre activité dans AndroidManfiest.xml . Si vous utilisez par exemple le @android:style/Theme.NoTitleBar , vous n'avez pas de ActionBar. Dans ce cas, l'appel à getActionBar() renverra nulle. Alors assurez-vous d'avoir une ActionBar en premier.

    L'étape suivante consiste à configurer android:parentActivityName dans l'activité que vous souhaitez naviguer si vous appuyez sur le bouton Précédent. Cela devrait être fait dans AndroidManfiest.xml aussi.

    Maintenant, vous pouvez activer le bouton de retour dans la méthode onCreate de votre activité "enfant".

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); } 

    Maintenant, vous devez implémenter la logique du bouton de retour. Vous simplement remplacer la méthode onOptionsItemSelected dans votre activité "enfant" et vérifiez l'id du bouton arrière qui est android.R.id.home .

    Maintenant, vous pouvez déclencher la méthode NavUtils.navigateUpFromSameTask(this); MAIS si vous n'avez pas spécifié l' android:parentActivityName dans AndroidManfiest.xml cela bloquera votre application.

    Parfois, c'est ce que vous voulez, car il vous rappelle que vous avez oublié "quelque chose", mais si vous voulez éviter cela, vous pouvez vérifier si votre activité a un parent en utilisant la méthode getParentActivityIntent() . Si cela renvoie nulle, vous n'avez pas spécifié le parent.

    Dans ce cas, vous pouvez déclencher la méthode onBackPressed() qui fait essentiellement la même chose que si l'utilisateur appuie sur le bouton arrière sur le périphérique. Une bonne mise en œuvre qui ne vous heurte jamais ne serait pas

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

    Notez que l'animation que l'utilisateur voit diffère entre NavUtils.navigateUpFromSameTask(this); Et onBackPressed() .

    C'est à vous la route que vous prenez, mais j'ai trouvé la solution utile, surtout si vous utilisez une classe de base pour toutes vos activités.

    Annotations Android:

     @OptionsItem(android.R.id.home) void homeSelected() { onBackPressed(); } 

    Source: https://github.com/excilys/androidannotations

    Fichier AndroidManifest:

      <activity android:name=".activity.DetailsActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="br.com.halyson.materialdesign.activity.HomeActivity" /> </activity> 

    Ajouter dans DetailsActivity:

     protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } 

    c'est du travail :]

    Je pense que onSupportNavigateUp() est la plus simple et la meilleure façon de le faire

    Vérifiez le code dans ce lien Cliquez ici pour obtenir le code complet

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.