web-dev-qa-db-fra.com

getSupportActionBar () La méthode getSupportActionBar () n'est pas définie pour le type TaskActivity. Pourquoi?

On m'a recommandé d'étendre ma classe Activity à partir d'ActionBarActivity

Voici le code précédent:

import Android.support.v7.app.ActionBar;
import Android.support.v7.app.ActionBarActivity;  

public class MainActivity extends Activity  {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);         
}

J'ai écrit une nouvelle demande et suivi les conseils.

import Android.os.Bundle;
    import Android.support.v7.app.ActionBar;
    import Android.support.v7.app.ActionBarActivity;            

    public class MainActivity extends ActionBarActivity {

          @Override
          public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActionBar actionBar =getSupportActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);            
            setContentView(R.layout.activity_main);
          }

          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
          }            
        }

Si j'utilise ACtionBarActivity au lieu de Activity, j'obtiens l'erreur suivante sur le téléphone lorsque j'essaie de l'exécuter:

La méthode getSupportActionBar () n'est pas définie pour le type TaskActivity

Voici la réponse à ma question. Je l'ai demandé à nouveau avec quelques remarques. Comment ajouter des bibliothèques de support?

Votre classe doit s'étendre de ActionBarActivity , plutôt qu'une simple Activity pour utiliser les méthodes getSupport*().

Mise à jour [2015/04/23]: Avec la sortie de Android Support Library 22.1 =, vous devez maintenant étendre AppCompatActivity. De plus, vous n'avez plus have pour étendre ActionBarActivity ou AppCompatActivity, car vous pouvez maintenant incorporer un AppCompatDelegate instance dans n'importe quelle activité.

75
MH.

Voici une autre solution que vous auriez pu utiliser. Cela fonctionne dans mon application.

      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Android.support.v7.app.ActionBar actionBar =getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);            
        setContentView(R.layout.activity_main)

Ensuite, vous pouvez vous débarrasser de cette importation pour l'utilisation d'une seule ligne ActionBar.

5
dongemus

Si vous étendez déjà depuis ActionBarActivity et que vous essayez d'obtenir la barre d'actions à partir d'un fragment:

ActionBar mActionBar = (ActionBarActivity)getActivity()).getSupportActionBar();
3
Heraldo

Si vous étendez à partir d'une AppCompatActivity et essayez d'obtenir l'ActionBar à partir du fragment, vous pouvez le faire:

ActionBar mActionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
2
Horatio

Vous devez modifier l'activité étend pour étendre AppCompactActivity, puis essayez de définir et getSupportActionBar ()

1
Tony Jacob

Pouvez-vous définir l'ActionBar avant de définir la vue Contient? Cette commande serait mieux:

 @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionBar =getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);            
  }
0