2013-04-29 208 views
2

我希望我的代码在复选框的check/uncheck事件上动态执行某些操作。 我有这样的代码:将值传递给回调函数

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宣言中,因为在回调函数“这个”变量没有任何意义得到一个错误,当然。 问题是,我如何将一个变量(“这个”的父范围或任何其他变量)传递给回调函数? 谢谢!

回答

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)); 

检查错字

+0

我很愚蠢..谢谢! – 2013-04-29 14:24:17

+0

如果它可以帮助你记得答案被接受 – Blackbelt 2013-04-29 15:03:38

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(); 

      } 
     });