使用自定义按钮

时间:2015-08-27 20:54:19

标签: java android customization onclicklistener alertdialog

我有一个自定义警报对话框。我目前正在尝试为我的两个按钮改变onclicklisteners。以前我使用过以下代码。

builder.setNegativeButton("Nope", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Do nothing
            dialog.dismiss();
        }
    });
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) { 
           \\code here which is not relevant to question 
      }
    });

但是,现在由于对话框有自定义视图和自定义按钮,我使用以下方法。

Button confirm = (Button) windowView.findViewById(R.id.confirmbutton);
     Button cancel = (Button) windowView.findViewById(R.id.negatebutton);

     cancel.setOnClickListener(new Button.OnClickListener() {

         public void onClick(View v){

         }

     });

我的问题是如果我无法访问dialog变量,如何在取消按钮侦听器中关闭对话框。我想使用我已经使用的AlertDialog,并且不希望使用不同类型的对话框的解决方案。

1 个答案:

答案 0 :(得分:2)

您需要做的只是保留Dialog的引用,然后您可以调用dismiss方法。在我的例子中,我将引用保留为属性。

private Dialog dialog;

@Override
public void onResume() {

    AlertDialog.Builder adb = new AlertDialog.Builder(this);

    LinearLayout llView = new LinearLayout(this);

    Button btnDismiss = new Button(this);
    btnDismiss.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    llView.addView(btnDismiss);

    adb.setView(llView);
    dialog = adb.create();
    dialog.show();

    super.onResume();
}

将引用保留为属性非常重要,因为引用必须是最终才能在onClick方法中访问,并且由于尚未创建对话框,因此您无法将最终引用保留在方法变量中,然后将其保留在财产。