BasicActivity中的AlertDialog不起作用 Theme.AppCompat
BasicActivity中的AlertDialog不起作用 Theme.AppCompat
此问题已有答案在此处:
我有一个BasicActivity,并且我希望在用户单击Floating Action Button时显示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。
清单:
活动:
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(); } }); ... } }
编辑:错误与AppTheme或其他内容无关,而只是以下行:
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
必须替换为:
AlertDialog.Builder builder = new AlertDialog.Builder(ListActivity.this);
对于浪费您的时间,我真的很抱歉,各位!
admin 更改状态以发布 2023年5月23日
我遇到了使用[this]关键字而不是getApplicationContext()的问题。当使用getApplicationContext()时,会应用应用的主题,而不是活动的主题。
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(); } } });