web-dev-qa-db-fra.com

Comment puis-je réparer cette erreur: Vous devez utiliser un thème (ou un descendant) Theme.AppCompat avec cette activité

J'ai cherché dans tous les sites Internet pour corriger cette erreur, mais je n'ai pas pu. Je veux juste créer AlertDialog avec deux boutons Oui et Non.

Ceci est mon code:

import Android.content.DialogInterface;
import Android.support.v7.app.AlertDialog;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;

public class DialogActivity extends AppCompatActivity {

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

    Button btnDialog= (Button) findViewById(R.id.btnDialog);
    btnDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialogMessage();
        }
    });
}

private void showDialogMessage(){

    AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
    // Add the buttons
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // User clicked OK button
        }
    });
    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // User cancelled the dialog
        }
    });

    AlertDialog dialog = builder.create();
    dialog.show();
}
}

Et c'est mon style:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
    <!-- Customize your theme here. -->
</style>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

c'est mon style (v21):

<resources>
<!-- extend one of the Theme.AppCompat themes -->
<style name="AppTheme" parent="AppTheme.Base">
    <!-- customize the color palette -->
    <item name="Android:colorPrimary">@color/colorPrimary</item>
    <item name="Android:colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="Android:colorAccent">@color/colorAccent</item>
    <item name="Android:windowTranslucentStatus">true</item>
    <item name="Android:colorControlHighlight">@color/colorHighLight</item>
</style>
</resources>

c'est manifeste:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.saly.rastari" >   
    <application
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name=".DialogActivity"
            Android:label="@string/title_activity_test"
            Android:screenOrientation="portrait" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>       
    </application>
</manifest>

Lorsque je clique sur le bouton Dialog, j'obtiens cette erreur:

11-02 04:36:55.941 24352-24352/? E/AndroidRuntime: FATAL EXCEPTION: main
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime: Process: com.irannara.pda.pdaassistant, PID: 24352
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime: Java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.Java:309)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.Java:278)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:252)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.Java:76)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.support.v7.app.AlertController.installContent(AlertController.Java:216)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.support.v7.app.AlertDialog.onCreate(AlertDialog.Java:240)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.app.Dialog.dispatchOnCreate(Dialog.Java:373)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.app.Dialog.show(Dialog.Java:274)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at com.irannara.pda.pdaassistant.DialogActivity.showDialogMessage(DialogActivity.Java:42)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at com.irannara.pda.pdaassistant.DialogActivity.access$000(DialogActivity.Java:10)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at com.irannara.pda.pdaassistant.DialogActivity$1.onClick(DialogActivity.Java:21)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.view.View.performClick(View.Java:4780)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.view.View$PerformClick.run(View.Java:19866)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.os.Handler.handleCallback(Handler.Java:739)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.os.Handler.dispatchMessage(Handler.Java:95)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.os.Looper.loop(Looper.Java:135)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Android.app.ActivityThread.main(ActivityThread.Java:5254)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Java.lang.reflect.Method.invoke(Native Method)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at Java.lang.reflect.Method.invoke(Method.Java:372)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
11-02 04:36:55.941 24352-24352/? E/AndroidRuntime:     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
11-02 04:36:55.959 718-718/? E/EGL_emulation: tid 718: eglCreateSyncKHR(1209): error 0x3004 (EGL_BAD_ATTRIBUTE)

aucun de ces liens ne pourrait m'aider:

et plus.

comment puis-je réparer cela?

7
Salar Rastari

Si vous avez d'autres fichiers de styles à côté, d'autres dossiers de valeurs tels que "values-v11", "values-v14" ... Modifiez également le thème et essayez de nettoyer votre application avant de la lancer.

Modifié: depuis votre activité, changez getApplicationContext() en this:

AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

à

AlertDialog.Builder builder = new AlertDialog.Builder(this);

Parce que le dialogue devrait également étendre le thème Appcompat.

19
NamNH

Si quelqu'un rencontre ce problème avec des activités, essayez de configurer explicitement un thème pour votre activité.

<activity Android:name=".activities.BLEControlActivity" Android:theme="@style/Theme.AppCompat.DayNight"></activity>
1
aclokay

dans votre fichier style.xml, ajoutez ci-dessous le code-

style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme.Base" 
           parent="@style/Theme.AppCompat.Light">
    </style>
</resources>

définir également un thème comme celui-ci dans votre activité

 <activity
            Android:name=".DialogActivity"
            Android:label="@string/title_activity_test"
            Android:screenOrientation="portrait" 
            Android:theme="@Android:style/AppTheme.Dialog">

OR

<activity
            Android:name=".DialogActivity"
            Android:label="@string/title_activity_test"
            Android:screenOrientation="portrait" 
            Android:theme="@style/AppTheme">

projet propre et relancez ..

0
sud

Je suis confronté à un tel cas et j'ai réussi à le résoudre. C'est ici:

  • définissez votre boîte de dialogue d'alerte dans la classe MainActivity, par exemple:
public class MainActivity extends AppCompatActivity {

   AlertDialog.Builder alertDialog;
  • puis initialisez-le sur la méthode OnCreate () comme ci-dessous:
alertDialog = new AlertDialog.Builder(this);
  • alors vous pouvez faire le reste de la personnalisation du dialogue d'alerte comme icône, titre, message où vous le souhaitez. dans mon cas je l'ai utilisé dans onFinish () du compte à rebours, comme indiqué ci-dessous:
public void onFinish() {

                alertDialog.setIcon(Android.R.drawable.alert_light_frame);
                alertDialog.setTitle("You are done");
                alertDialog.setMessage("you got it");
                alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        runTheCode();
                    }
                });
                alertDialog.show();
0
Sami Alkendi