如何在AlertDialog中重载按钮回调

时间:2013-09-19 13:46:23

标签: android alertdialog

我不想创建一个对话框项目,具有与AlertDialog相同的外观和感觉(like this one),但按钮具有个性化回调。

我试图像这样创建一个AlertDialog:

AlertDialog.Builder adb = new AlertDialog.Builder(SearchActivity.this); AlertDialog d = adb.setView(relativeLayout).create(); [..]

                    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
                    lp.copyFrom(d.getWindow().getAttributes());
                    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
                    lp.height = WindowManager.LayoutParams.MATCH_PARENT;

[...]

                    d.setButton(-1, "Retour", new AlertDialog.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
                    d.setButton(-2, "Description",
                            new AlertDialog.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    videoView.setVisibility(View.INVISIBLE);
                                    browser.setVisibility(View.VISIBLE);
                                }
                            });
                    d.setButton(-3, "Video", new AlertDialog.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            videoView.setVisibility(View.VISIBLE);
                            browser.setVisibility(View.INVISIBLE);
                                            }
                    });`

当我点击视频按钮或说明按钮时,对话框会自动关闭。 我知道使用AlertDialog不是最好的主意,但我没有时间学习如何使用片段。

如何阻止对话框关闭?

1 个答案:

答案 0 :(得分:0)

按钮上的解除按下行为内置于AlertController中,它实现了AlertDialog(参见com.android.internal.app.AlertController的第143-145行)。您最好创建自己的DialogFragment子类,并将其设置为AlertDialog

您可以在AlertController的第188-205行找到相关布局/样式的参考。我无法发布带有资源的文件夹的链接,因为我没有足够的声誉,但它是链接仓库中的核心/ res / res /。