AlertDialog错误:您需要在此活动中使用Theme.AppCompat主题(或后代)

时间:2017-12-20 09:27:58

标签: android alertdialog listadapter

我遇到了这个问题,不知道如何修复它。在这里我的清单

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

这里是我在listAdapter中的onclick

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更改主题

但没有工作

4 个答案:

答案 0 :(得分:0)

我希望这对你有所帮助

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

我面对这样的案件,并设法解决了这个问题。在这里:

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