2

AlertDialogを検証していますが、AlertDialogディスプレイの上にトーストを上げたいと思います。

このコードを持っていますが、トーストがアクティビティに表示されます

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

2 に答える 2

7

AdvertDialog.Builderを使用する代わりに、ダイアログのように動作するカスタムダイアログを作成できますが、実際には通常のアクティビティです。あなたのトーストはこれの上に普通に描かれるべきです。

于 2010-03-01T13:54:53.123 に答える
3

ダイアログ内に検証メッセージを表示したいときに、この問題が発生しました。seanhodgesが与えた答えは、おそらくよりクリーンでより良い方法です。しかし、別の活動は私にとって実用的ではなかったので、私はこの解決策を思いつきました。

とにかく、AlerDialog.Builderを使用して、乾杯を表示できます。トーストをトリガーするボタンのOnClickListenerをオーバーライドすると、ダイアログの上にトーストを表示できます。

例;

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();
                }
            });
}
于 2012-04-16T19:42:07.127 に答える