ActionBarCompat: java.lang.IllegalStateException: vous devez utiliser un Theme.AppCompat

Je reçois une exception RuntimeException sur Android 2.3.5 mais j’utilise Theme.AppCompat (res / values ​​/ themes.xml). C’est le téléphone: http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php

    @style/QueryActionBar @style/QueryActionBar   @color/blueback @color/blueback @color/blueback @color/blueback   

Voici le fichier pour les valeurs-v11.

         

Voici l’erreur.

  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.txt2lrn.www/com.txt2lrn.www.LandingActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:102) at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98) at com.txt2lrn.www.LandingActivity.onCreate(LandingActivity.java:95) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) ... 11 more 

Désolé, j’ai aussi Android: theme = “@ style / Theme.Styled” défini dans AndroidManifest.xml.

Si vous étendez ActionBarActivity dans votre MainActivity, vous devrez également changer le thème parent dans values-v11.
Donc, le style.xml dans values-v11 sera –

       

EDIT: je vous recommande de ne plus utiliser ActionBar et de commencer à utiliser la mise en page AppBar incluse dans la bibliothèque du support de conception Android

Pour simplement append ActionBar Compat, votre activité ou application doit utiliser le thème @ style / Theme.AppCompat dans AndroidManifest.xml comme ceci:

   

Cela appenda une barre d’action dans activty (ou toutes les activités si vous avez ajouté ce thème à l’application)


Mais généralement, vous devez personnaliser votre barre d’action. Pour ce faire, vous devez créer deux styles avec le parent Theme.AppCompat, par exemple, “@ style / Theme.AppCompat.Light”. Le premier sera pour api 11> = (versions d’android avec barre d’action Android), le second pour l’api 7-10 (pas de barre d’action).

Regardons le premier style. Il sera situé dans res / values-v11 / styles.xml . Il ressemblera à ceci:

   

Et vous devez avoir le même style pour 7-10 api. Il sera situé dans res / values ​​/ styles.xml , MAIS parce que les niveaux d’API ne connaissent pas encore les éléments de style de la barre d’action Android d’origine, nous devrions en utiliser un, fourni par la bibliothèque de support. Les éléments ActionBar Compat sont définis tout comme Android original, mais sans partie “Android”:

   

Veuillez marquer cela, même si les niveaux d’API supérieurs à 10 ont déjà une barre d’action, vous devez toujours utiliser les styles AppCompat. Si vous ne le faites pas, vous aurez cette erreur lors du lancement d’Acitvity sur les appareils avec Android 3.0 et supérieur:

java.lang.IllegalStateException: vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité.

Voici le lien de cet article original http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html écrit par Chris Banes.

PS Désolé pour mon anglais

Vérifiez et assurez-vous de ne pas avoir un autre dossier de valeurs faisant référence à theme.styled et n’utilisant pas le thème AppCompat

c. values-v11 dossier values-v11

Essaye ça…

styles.xml

    

AndroidManifest.xml

        

Votre Activity étend ActionBarActivity ce qui nécessite l’ AppCompat.theme de AppCompat.theme . Passer d’ ActionBarActivity à Activity ou FragmentActivity , cela résoudra le problème.

Just do it Build -> Projet propre. Je pense que cela va résoudre votre problème.

Mon manifeste ne fait référence à aucun thème … il ne devrait pas avoir à AFAIK

Bien sûr que oui. Rien ne va magiquement appliquer Theme.Styled à une activité. Vous devez déclarer vos activités – ou toute votre application – en utilisant Theme.Styled , par exemple:

  

J’ai rencontré cette erreur lorsque j’essayais de créer un DialogBox lorsque des actions sont effectuées dans la classe CustomAdapter. Ce n’était pas une activité mais une classe d’adaptateur. Après 36 heures d’efforts et en cherchant des solutions, je suis arrivé à ceci.

Envoyez l’activité en tant que paramètre lors de l’appel du CustomAdapter.

 CustomAdapter ca = new CustomAdapter(MyActivity.this,getApplicationContext(),records); 

Définissez les variables dans l’adaptateur personnalisé.

 Activity parentActivity; Context context; 

Appelez le constructeur comme ceci.

 public CustomAdapter(Activity parentActivity,Context context,List records){ this.parentActivity=parentActivity; this.context=context; this.records=records; } 

Et enfin, lors de la création de la boîte de dialog dans la classe d’adaptateur, faites-le comme ceci.

 AlertDialog ad = new AlertDialog.Builder(parentActivity).setTitle("Your title"); and so on.. 

J’espère que ceci vous aide

Je viens de faire passer mon application d’ActionBarSherlock à ActionBarCompat. Essayez de déclarer votre ancien thème comme ceci:

  

Ensuite, définissez le thème dans votre fichier AndroidManifest.xml:

  

J’ai eu un tel crash sur les appareils Samsung même si l’activité utilisait Theme.AppCompat . La cause principale était liée aux optimisations étranges du côté de Samsung:

 - if one activity of your app has theme not inherited from Theme.AppCompat - and it has also `android:launchMode="singleTask"` - then all the activities that are launched from it will share the same Theme 

Ma solution venait de supprimer android:launchMode="singleTask"

dans mon cas, j’ai fait une vue personnalisée que j’ai ajoutée au constructeur de vue personnalisée

 new RoomView(getAplicationContext()); 

le contexte correct est l’activité donc changé en:

 new RoomView(getActivity()); 

ou

 new RoomView(this); 

Pour ma liste, j’utilise un adaptateur personnalisé qui étend ArrayAdapter. dans listiview j’ai 2 boutons l’un des boutons comme Custom AlertDialogBox. Ex: Activité parentActivity; Constructeur pour l’adaptateur `

 public CustomAdapter(ArrayList data, Activity parentActivity,Context context) { super(context,R.layout.listdummy,data); this.mContext = context; this.parentActivity = parentActivity; } 

`appelant l’adaptateur depuis MainActivty

 adapter = new CustomAdapter(dataModels,MainActivity.this,this); 

par résolveur de problème de machine, eu apenas adicionei par minha MainActivity (“Theme = Pour résoudre mon problème, je l’ai juste ajouté dans mon MainActivity (” Theme = “@ style / MyTheme” “) où MyTheme est le nom de mon thème

 [Activity(Label = "Name Label", MainLauncher = true, Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, Theme = "@style/MyTheme")]