首页 > 解决方案 > 您需要在此活动中使用 Theme.AppCompat 主题(或后代)。在数据适配器中

问题描述

我正在尝试在 RecyclerView 中使用 AlertDialog 但我遇到了以下问题:您需要在此活动中使用 Theme.AppCompat 主题(或后代)。Activity 类中的相同 AlertDialog 工作正常,但在 DataAdapter 中没有。

风格

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

显现

  <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.simple">
<uses-permission 
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <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">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

数据适配器

private Context mCtx;



    holder.moreOptions.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        PopupMenu popupMenu = new PopupMenu(mCtx,holder.moreOptions);
        popupMenu.inflate(R.menu.card_popup_menu);
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                switch (item.getItemId()){

                    case R.id.delete_note:



                        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mCtx);
                        alertDialog.setTitle("Notice");
                        alertDialog.setMessage("Launching this missile will destroy the entire universe. Is this what you intended to do?");
                        // add the buttons
                        alertDialog.setPositiveButton("Launch missile", null);
                        alertDialog.setNeutralButton("Remind me later", null);
                        alertDialog.setNegativeButton("Cancel", null);
                        // create and show the alert dialog
                        AlertDialog dialog = alertDialog.create();
                        dialog.show();

标签: androidandroid-recyclerview

解决方案


您还必须像这样将主题 ID 与上下文一起传递。如果对您有帮助,请接受作为答案。

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this, R.style.Theme_AppCompat_DayNight_Dialog_MinWidth);

推荐阅读