BasicActivity中的AlertDialog不起作用 Theme.AppCompat

9 浏览
0 Comments

BasicActivity中的AlertDialog不起作用 Theme.AppCompat

此问题已有答案在此处:

您需要使用Theme.AppCompat主题(或后代)与此活动。更改为Theme.AppCompat会导致其他错误

您需要使用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日
0
0 Comments

在清单文件中

// 想要显示工具栏的活动

    

在 styles.xml 文件中


将此添加到清单文件中的应用程序标签中


0
0 Comments

我遇到了使用[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();
                    }
                }
            });

0