2

我希望我的代码在复选框的选中/取消选中事件上动态执行某些操作。我有这个代码:

checkConfidentiality.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                        if(isChecked==true)
                            new AlertDialog.Builder(this).setTitle("Argh").setMessage("YEEEEEEEE").setNeutralButton("Close", null).show();  

                        else
                            new AlertDialog.Builder(this).setTitle("Argh").setMessage("NOOOOOOOO").setNeutralButton("Close", null).show();  

            }
        });

在这种特殊情况下,我在 AllertDialog 声明中收到错误,当然,因为在回调函数中,“this”变量没有任何意义。问题是,如何将变量(父范围的“this”或任何其他变量)传递给回调函数?谢谢!

4

2 回答 2

6
YourClassName.this

应该做的伎俩。

或者您应该编写自定义类。例如

private class MyOnCheckedChangeListener implement CompoundButton.OnCheckedChangeListener {
      private Context context;
      public MyOnCheckedChangeListener (Context context) {
         this.context = context;
      }

       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
       }

}

并像这样使用它:

checkConfidentiality.setOnCheckedChangeListener(new MyOnCheckedChangeListener(this));

检查错字

于 2013-04-29T14:19:09.710 回答
1

您不必传递活动,您需要传递上下文。您可以使用 buttonView.getContext()代替this

checkConfidentiality.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                        if(isChecked==true)
                            new AlertDialog.Builder(buttonView.getContext()).setTitle("Argh").setMessage("YEEEEEEEE").setNeutralButton("Close", null).show();  

                        else
                            new AlertDialog.Builder(buttonView.getContext()).setTitle("Argh").setMessage("NOOOOOOOO").setNeutralButton("Close", null).show();  

            }
        });
于 2013-04-29T14:25:00.950 回答