it-swarm.com.de

Wie kann ich diesen Fehler beheben: Sie müssen für diese Aktivität ein Theme.AppCompat-Theme (oder einen Nachkommen) verwenden

Ich habe alle Internetseiten durchsucht, um diesen Fehler zu beheben, aber ich konnte nicht. Ich möchte nur AlertDialog mit zwei Schaltflächen Ja und Nein erstellen.

Das ist mein 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();
}
}

Und das ist mein 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>

das ist mein Stil (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>

das ist offensichtlich:

    <?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>

Wenn ich auf die Schaltfläche "Dialog" klicke, wird folgende Fehlermeldung angezeigt:

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)

keiner dieser Links konnte mir helfen:

und mehr.

wie kann ich das beheben?

7
Salar Rastari

Wenn Sie andere Stildateien in Ordnern mit anderen Werten haben, wie "values-v11", "values-v14" ... Bearbeiten Sie das Design ebenfalls und versuchen Sie, Ihre App zu bereinigen, bevor Sie sie ausführen.

Bearbeitet: Von Ihrer Aktivitätsänderung getApplicationContext() zu this:

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

zu

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

Weil der Dialog auch das Thema Appcompat erweitern soll.

19
NamNH

Wenn dieses Problem bei Aktivitäten auftritt, versuchen Sie, ein Thema für Ihre Aktivität explizit zu konfigurieren.

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

Dieser Fehler tritt auf, weil Ihr AlertDialog während Ihrer Aktivität kein AppCompat-Design verwendet. Verwenden Sie zur Fehlerbehebung die Eigenschaft this Ihrer Aktivität anstelle von getApplicationContext().

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

Der Name Ihrer Aktivität, gefolgt von .this, in diesem Fall DialogActivity.this sollte immer anstelle von nur this verwendet werden, da Sie, wenn Ihr Dialogfeld in einer anderen Klasse erstellt wird, beispielsweise einem Adapter, einen Fehler beim Kompilieren erhalten, der besagt, dass ein Context wurde anstelle der angegebenen Adapterklasse erwartet.

0
instanceof

fügen Sie in Ihrer style.xml-Datei den folgenden Code hinzu:

style.xml

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

definieren Sie auch ein Thema wie dieses in Ihrer Aktivität

 <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">

projekt säubern und erneut ausführen ..

0
sud

Ich stehe einem solchen Fall gegenüber und es ist mir gelungen, ihn zu lösen. Hier ist es:

  • definieren Sie Ihren Warnungsdialog in der Klasse MainActivity. Beispiel:
public class MainActivity extends AppCompatActivity {

   AlertDialog.Builder alertDialog;
  • initialisieren Sie es dann mit der OnCreate () -Methode wie folgt:
alertDialog = new AlertDialog.Builder(this);
  • anschließend können Sie den Rest der Warnmeldung wie Symbol, Titel und Nachricht an einer beliebigen Stelle im Dialogfeld anpassen. In meinem Fall habe ich es in onFinish () des Countdown-Timers wie folgt verwendet:
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