【问题标题】:AlertDialog error: You need to use a Theme.AppCompat theme (or descendant) with this activityAlertDialog 错误:您需要在此活动中使用 Theme.AppCompat 主题(或后代)
【发布时间】:2017-12-20 09:27:58
【问题描述】:

我遇到了这个问题,不知道如何解决。这是我的清单

<activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main"
        android:theme="@style/Theme.AppCompat.NoActionBar" />

这里是我在 listAdapter 中的点击

holder.iconDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //need to confirm it first
            new AlertDialog.Builder(context)
                    .setTitle("Delete Setcard")
                    .setMessage("Do you really want to delete setcard?")
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int whichButton) {
                            //run API volley
                            deleteSetcard(setcard_id);
                        }})
                    .setNegativeButton(android.R.string.no, null).show();
        }
    });

我尝试了其他解决方案,例如使用 Theme.AppCompat.Light 更改主题

但没有工作

【问题讨论】:

标签: android android-alertdialog listadapter


【解决方案1】:

希望这篇文章对你有帮助

 <style name="myDialog" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    ...
 </style>

new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.myDialog));

【讨论】:

    【解决方案2】:

    我遇到了这样的情况,我设法解决了它。这里是:

    • 在 MainActivity 类中定义您的警报对话框,例如:

         public class MainActivity extends AppCompatActivity {
      
            AlertDialog.Builder alertDialog;
      
    • 然后在 OnCreate() 方法上初始化它,如下所示:

      alertDialog = new AlertDialog.Builder(this);
      
    • 然后您可以在任何您喜欢的地方进行警报对话框的其余部分自定义,例如图标、标题、消息。就我而言,我在倒数计时器的 onFinish() 中使用了它,如下所示:

      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();
      

    【讨论】:

      【解决方案3】:

      使用 AppCompat 主题时,您必须确保您的 Activity 扩展 AppCompatActivity,并且您从 Android 支持库导入 android.support.v7.app.AlertDialog 而不是 android.app.AlertDialog

      【讨论】:

        【解决方案4】:

        试试这个

             <style name="InvitationDialog" 
             parent="Theme.AppCompat.Light.Dialog.Alert">
            <item name="colorAccent">@color/blue</item>
            <item name="android:textColorPrimary">@color/gray</item>
            <item name="android:editTextColor">@color/gray</item>
            <item name="android:background">@color/white</item>
            </style> 
        

        代码

               new AlertDialog.Builder(context,R.style.InvitationDialog)
               .setTitle("Delete Setcard")
                        .setMessage("Do you really want to delete setcard?")
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .setPositiveButton("Yes", new 
                        DialogInterface.OnClickListener() {
        
                            public void onClick(DialogInterface dialog, int 
                           whichButton) {
                                //run API volley
                                deleteSetcard(setcard_id);
                            }})
                        .setNegativeButton("No", null).show();
                        }
        }); 
        

        【讨论】:

          猜你喜欢
          • 2014-03-15
          • 2018-11-27
          • 2015-11-27
          • 2016-07-04
          • 2016-05-16
          相关资源
          最近更新 更多