将值传递给回调函数

时间:2013-04-29 14:18:02

标签: java android checkbox sdk reference

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

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”或任何其他变量)传递给回调函数? 谢谢!

2 个答案:

答案 0 :(得分: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));

检查拼写错误

答案 1 :(得分: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();  

            }
        });