我在Android应用程序中编写了一个自定义侦听器,如下所示:
private OnListener l = new OnListener() {
@Override
public void OnReceive() {
Log.v(TAG, "Received response");
};
它运行良好,但是,当我将l设置为null时,它仍然会调用OnReceive()。这可能是因为它在单独的线程中运行,并且对它的引用仍然存在于事件调用程序函数中。但是,如何确定是否将其设置为null,它什么也没收到?或者如何注销听众?
最佳答案
我不知道事件和线程,但是如果您为控件设置一个null侦听器,它应该注销。
我尝试了这个:
int timesFired=0;
Button btn2, btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView txt=(TextView)findViewById(R.id.textView1);
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
timesFired++;
txt.setText("btn1's listener fired " + timesFired);
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btn1.setOnClickListener(null);
txt.setText("btn1 unregistered");
}
});
}
它可以实现预期的效果。