Android定制带按钮点击事件的对话框

9

i have CustomDialog.java like this :

public class CustomDialog {
Dialog dl;
public void ShowDialog(Context context, String message) {
    dl = new Dialog(context);
    dl.setContentView(R.layout.custom_dialog);

    TextView tv_message = (TextView) dl.findViewById(R.id.textViewMessage);

    tv_message.setText(message);

    Button bt_yes = (Button)dl.findViewById(R.id.buttonYes);
    Button bt_no = (Button)dl.findViewById(R.id.buttonNo);

    bt_yes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckYes();
        }
    });
    bt_no.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dl.dismiss();
        }
    });
    dl.show();

}

public Boolean CheckYesNo(Boolean check){
    return check;
}

public Boolean CheckYes() {
    return true;
}

public void CloseDialog() {
    dl.dismiss();
}

这是在Activity中使用CustomDialog的代码:

CustomDialog cdl = new CustomDialog ();
                        cdl.ShowDialog(Activity1.this, "test");
                        if (cdl.CheckYesNo(true)) {
                            // doing something with data and go to Activity 2
                        }
                        else {
                            cdl.CloseDialog();
                        }

我想要这样做:
1. 在Activity1中,点击ImageButton后,CustomDialog会显示。
2. 在CustomDialog显示后,如果点击“是”按钮,则会对数据执行某些操作并进入Activity2。
3. 如果点击“否”按钮,则CustomDialog将关闭且不对数据执行任何操作。
但我的问题是:
当我点击ImageButton时,CustomDialog会显示,我想要对数据执行的代码会自动执行并跳转到Activity2,我无法选择是否点击“是”或“否”。
我认为问题在于“是”按钮的onClick事件上。
如何解决?
4个回答

16

参数初始化

  Dialog dialog;

您可以在需要的地方使用此功能

dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom_dialog);
    dialog.show();


TextView tv_message = (TextView) dialog .findViewById(R.id.textViewMessage);

tv_message.setText(message);

Button bt_yes = (Button)dialog.findViewById(R.id.buttonYes);
   Button bt_no = (Button)dialog.findViewById(R.id.buttonNo);

bt_yes.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        CheckYes();
    }
});
bt_no.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        dialog.dismiss();
    }
});

我在你的代码中找到了解决方案。非常感谢你。 - 1234abcd

1
你的代码看起来没问题,除了按钮的onClickListeners,我不明白为什么你还想在那里调用CheckYes(),当你可以直接在onClick方法中做任何你想做的事情。代码应该像这样:
public void ShowDialog(final Context context, String message) {
    dl = new Dialog(context);
    dl.setContentView(R.layout.custom_dialog);

    TextView tv_message = (TextView) dl.findViewById(R.id.textViewMessage);

    tv_message.setText(message);

    Button bt_yes = (Button)dl.findViewById(R.id.buttonYes);
    Button bt_no = (Button)dl.findViewById(R.id.buttonNo);

    bt_yes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //You said you wanted to do something with the data? What data? Anyway, this is where you can do it
            //do whatever with the "data"
            //this is where you want to go to another activity
            Intent activity2 = new Intent(context, <Your-Activity2-Name>.class);
            context.startActivity(activity2);
            //and you still want to dismiss the dialog
            dl.dismiss();
        }
    });
    bt_no.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dl.dismiss();
        }
    });
    dl.show();

}

我希望这能为您提供一些帮助。请明确指出“在点击YES按钮时对数据进行操作”的具体意思 - 同时,当您说无法选择是或否进行单击时,您是什么意思?

我的意思是当ImageButton被点击时,CustomDialog弹出并自动跳转到Activity2,因此我不能选择点击“是”或“否”按钮。 - 1234abcd
我无法在Activity1中使用Dialog,因为它不会像我想要的那样显示。所以,我使用CustomDialog。 - 1234abcd
请展示 Activity1 的完整代码,其中包含您显示对话框的部分 - 这可能是您需要进行更改的地方。 - ishmaelMakitla

0

对我来说,我必须确保在使用 findViewById 访问对话框之前已经创建了对话框。在我创建对话框的内部类中,在 OnStart 回调函数中访问按钮。当我说 .show() 时,我尝试在类外部执行它,但它给了我一个空指针异常。

对我来说,我能够访问对话框中的按钮 ID 的唯一方法是通过对话框。我不能只是执行 getActivity().findViewById(R.id.blah)

这是我使用的代码:

        @Override
    public void onStart(){
        super.onStart();


        if(getDialog() == null){
            return;
        }
        else {

            ImageButton closeButton = (ImageButton)getDialog().findViewById(R.id.closeButton);

            closeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    getDialog().dismiss();
                }
            });

        }

-2
    txt_showdailog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Dialog dialog =new Dialog(context);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setContentView(R.layout.bluetooothdialog);
            dialog.show();


        }
    });

1
添加一些描述来解释你的答案是否正确,这将有助于其他人从中学习。 - Avi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接