当前位置: 首页 > 知识库问答 >
问题:

BasicActivity中的AlertDialog不工作主题。AppCompat[重复]

司空坚
2023-03-14

我有一个BasicActivity,我想在用户点击浮动动作按钮时显示一个AlertDialog。当我在Fab上打卡时:应用程序停止,出现以下错误:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

我尝试将活动的主题从(默认BasicActivity)更改为:

android:theme="@style/AppTheme.NoActionBar"

android:theme="@style/Theme.AppCompat"

但当我打开它并出现以下错误时,整个活动就会停止:

This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.

我看到了许多关于这个错误的问题,但我仍然没有弄明白。我只使用了一个默认活动(BasicActivity),我想显示一个简单的AlertDialog。

清单:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ListActivity"
        android:label="@string/title_activity_list"
        android:launchMode="singleTop"
        android:theme="@style/AppTheme.NoActionBar"
        />
    <activity
        android:name=".AddActivity"
        android:label="@string/title_activity_add"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>
    <activity
        android:name=".DetailsActivity"
        android:label="@string/title_activity_details"
        android:parentActivityName=".ListActivity"
        android:theme="@style/AppTheme.NoActionBar">
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
</application>

活动:

public class ListActivity extends AppCompatActivity {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        ...

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
                builder.setIcon(android.R.drawable.ic_dialog_alert);
                builder.setTitle("MyTitle");
                builder.setMessage("MyMessage);
                builder.setCancelable(false);
                builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        if (dialog != null) {
                            dialog.dismiss();
                        }
                    }
                });
                builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        if (dialog != null) {
                            dialog.dismiss();
                        }
                    }
                });
                AlertDialog alertDialog = builder.create();
                alertDialog.show();

            }
        });

        ...

    }

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

必须更换为:

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

我真的很抱歉浪费了你们的时间!

共有1个答案

张嘉佑
2023-03-14

我使用[this]关键字而不是getApplicationContext()得到了这个问题。当您使用getApplicationContext()时。它将应用app的主题,而不是活动。

 AlertDialog.Builder builder = new 
 AlertDialog.Builder(this);
            builder.setIcon(android.R.drawable.ic_dialog_alert);
            builder.setTitle("MyTitle");
            builder.setMessage("MyMessage);
            builder.setCancelable(false);
            builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    if (dialog != null) {
                        dialog.dismiss();
                    }
                }
            });
 类似资料:
  • 我正在尝试自定义AlertDialog按钮的强调色。但它并没有产生任何影响,它似乎是从系统中继承了颜色。这是我的风格/主题。 这是我试图构建警报对话框的代码。 编辑1: 我尝试了使用的方法,但它给出了相同的结果。 编辑2: 我还尝试更改对话框的重音颜色,但没有看到该颜色: 即使这样也不会改变按钮文本的颜色:(。

  • 我必须手动检查onresume中的夜间模式标志,并手动更新现有活动的资源,还是我做错了什么?如果我旋转设备,活动在日落后被重新创建,那么黑暗主题被正确地拾取,但在旋转之前,它仍然会显示光明主题。 支持lib23.4.0,Android版本6.0。

  • 所以我认为这是v22的常见问题,但当前的解决方案似乎并没有解决我的错误。我尝试将android: windowActionBar设置为false,将android: windowNoTitle设置为true,但这似乎没有帮助。 这是我的错误消息 这是我的styles.xml 也许我只是输入了错误的代码,所以希望有人能告诉我哪里出错了。谢谢你的时间。 编辑:我知道这个问题以前有人问过,但是目前所有的

  • 我的主题如下: 但是,当我在应用程序中创建AlertDialogs时,它们根本没有主题。其他组件(如ActionBar)的颜色也正确。我错过什么了吗? 我正在使用AppCompat版本,我的设备安装了Android 4.4.4。

  • 我的应用程序在Android N上运行良好,但在Android M上时崩溃: 奇怪的是,我甚至没有编辑任何与我的应用程序的主题有关的东西,所以这个错误非常奇怪: 致命异常:main Process:com.curlybraceApps.ruchir.Rescuer,PID:20394 java.lang.runtimeException:无法启动活动ComponentInfo{com.curlyb

  • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma