如何在AlertDialog之上加注Toast?

问题描述 投票:2回答:2

我正在验证AlertDialog,我想在AlertDialog显示的顶部提出Toast。

我有这个代码,但Toast显示在活动上

new AlertDialog.Builder(this).setTitle(R.string.contact_groups_add)
                .setView(addView).setPositiveButton(R.string.ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {

                                if (wrapper.getTitle().length()>0)
                                {
                                    processAdd(wrapper);
                                } else {
                                    Toast.makeText(getApplicationContext(), "Name is required", Toast.LENGTH_SHORT).show();
                                }
                            }
                        }).setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                // ignore, just dismiss
                            }
                        }).show();
java android android-sdk-2.1 toast
2个回答
6
投票

您可以创建一个custom dialog而不是使用AdvertDialog.Builder,它将像对话框一样运行,但实际上是一个普通的活动。你应该在这之上正常绘制你的祝酒词。


3
投票

当我想在对话框中显示验证消息时,我自己也有这个问题。 seanhodges给出的答案可能是更清洁和更好的方式。但是单独的活动对我来说并不实用,所以我提出了这个解决方案。

无论如何,你可以使用AlertDialog.Builder,并显示一个祝酒词。如果您覆盖要触发toast的按钮的OnClickListener,则可以在对话框的顶部显示Toast。

一个例子;

public void showToastOnDialog(final Context context) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Dialog title");
    builder.setMessage("Dialog message");
    builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Do nothing, you will be overriding this anyway
        }
    });
    builder.setNegativeButton(android.R.string.cancel,
            new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // You can implement code here, because you wont be
                    // overriding this
                }
            });
    final AlertDialog dialog = builder.create();
    // Make sure you show the dialog first before overriding the
    // OnClickListener
    dialog.show();
    // Notice that I`m not using DialogInterface.OnClicklistener but the
    // View.OnClickListener
    dialog.getButton(Dialog.BUTTON_POSITIVE).setOnClickListener(
            new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    Toast toast = Toast.makeText(context,
                            "I`m a toast on top of a dialog.",
                            Toast.LENGTH_LONG);
                    toast.show();
                    // Because you are overriding the OnClicklistener, the
                    // dialog will not auto dismiss
                    // after clicking
                    dialog.dismiss();
                }
            });
}
© www.soinside.com 2019 - 2024. All rights reserved.