【问题标题】: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();
}
});